1. 程式人生 > >在SSM框架中使用AJAX實現多檔案上傳

在SSM框架中使用AJAX實現多檔案上傳

今天來學習一下在SSM框架中使用ajax實現檔案的上傳。 1.首先我們需要一個搭建好的SSM框架專案,這個在這篇文章裡不是重點,自行先搭建好需要的專案。 這裡我是用的jsp頁面來和後臺介面關聯,在jsp檔案中我們需要一個form表單,請求方法為POST,enctype="multipart/form-data",設定這樣的一些屬性,在表單的子標籤裡面要一個type=“file”的input標籤;像這樣的<input type="file" id="file" name="file"/> ,當然也可以指定multiple="multiple",這樣就可以支援多個檔案的上傳了。除了file型別的標籤,我們還需要一個輔助的標籤來響應ajax請求,一般來說就是用最簡單的button型別的input標籤了,記住 這裡的ipnut標籤的型別不能寫submit,否則就直接是表單的提交了,和咱們的ajax沒啥關係了。
我這裡使用了jquery的庫,所以導了一個jquery的js包

<script type="text/javascript" src="../lib/js/jquery-1.9.0.min.js"></script>

下面的就直接貼JSP程式碼吧,方便直觀!

<%--
  Created by IntelliJ IDEA.
  User: admin
  Date: 2018/6/28
  Time: 20:53
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <script type="text/javascript" src="../lib/js/jquery-1.9.0.min.js"></script>
    <title>檔案上傳</title>
</head>
<body>
    <div style="align-items: center;align-content: center;">
        <h1>檔案上傳</h1>
        <form id="form" method="post" enctype="multipart/form-data">
            <p>請選擇要上傳的檔案:</p>
            <input id="file" name="file" type="file" multiple="multiple"/>
            <br>
            <input id="upload" name="upload" type="button" value="上傳">
        </form>
    </div>
</body>
<script>
    $(window).ready(function () {
        $("#upload").click(function () {
           var formData = new FormData($('#form')[0]);//獲取表單中的檔案
           //ajax請求
           $.ajax({
               url:"/file/upload",//後臺的介面地址
               type:"post",//post請求方式
               data:formData,//引數
               cache: false,
               processData: false,
               contentType: false,
               success:function (data) {
                   alert(data);
               },error:function () {
                   alert("操作失敗~");
               }
           })
        });
    });
</script>
</html>

再看下前面的JSP頁面執行後長啥樣吧!


好了,前面的事情做完了,接著來說說後臺的處理。 2.編寫檔案上傳的後臺處理介面,咱們使用的SSM框架,所以只需要在controller層寫一個uploadFileController類就行了,這個地方也沒啥好說的直接看程式碼和註釋吧!
package com.ssm.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * created by viking 2018/06/28
 * 檔案上傳介面
 */
@RestController
@RequestMapping("file")
public class UploadFileController {

    @RequestMapping(value = "upload", method = RequestMethod.POST)
    public String upload(@RequestParam("file") MultipartFile[] files){//支援多個檔案的上傳
        //例項化一個檔案存放的目錄地址
        String dir = "F:/uploadFile/";
        for (MultipartFile file : files){
            System.out.println("檔案型別:"+file.getContentType());
            String filename = file.getOriginalFilename();
            String suffix = filename.substring(filename.length() - 3);
            System.out.println("檔名:"+filename);
            System.out.println("檔案字尾:"+suffix);
            System.out.println("檔案大小:"+file.getSize()/1024+"KB");
            //建立要儲存檔案的路徑
            File dirFile = new File(dir,filename);
            if (!dirFile.exists()){
                dirFile.mkdirs();
            }
            try {
                //將檔案寫入建立的路徑
                file.transferTo(dirFile);
                System.out.println("檔案儲存成功~");
            } catch (IOException e) {
                e.printStackTrace();
            }


        }
        return "OK";
    }
}
執行一下,試試上傳的結果。 如圖所示:

檔案所在目錄的結果:


 結果完美的將我們上傳的檔案儲存在本地了。 大概就是這些了,如果大家覺得有問題的地方可以留言,我們一起討論。 如果有不正確的地方歡迎各路大神指教~~