MultipartFile文件上傳的實例


什么是MultipartFile

MultipartFile是spring類型,代表HTML中form data方式上傳的文件,包含二進制數據+文件名稱。【來自百度知道】

 

 

 

方法總結
byte[]

getBytes()

以字節數組的形式返回文件的內容。

String

getContentType

返回文件的內容類型。

FileItem

getFileItem()

返回底層的org.apache.commons.fileupload.FileItem實例。

InputStream

getInputStream()

返回一個InputStream來讀取文件的內容。

String

getName()

以multipart 表格的形式返回參數的名稱。

String

getOriginalFileName()

返回客戶機文件系統中的原始文件名。

long

getSize()

以字節的形式返回文件的大小

String

getStorageDescription()

返回multipart的內容和存儲位置描述。

protected

boolean

isAvailable()

確定Multipart內容是否仍然可用。

boolean

isEmpty()

返回上傳的文件是否為空,也就是說,在多部分表單中沒有選擇任何文件,或者選擇的文件沒有內容。

void

transferTo(File dest)

將接收到的文件傳輸到給定的目標文件。

單文件上傳

前段HTML頁面:

<form id="uploadForm" enctype = "multipart/form-data">
    <input type ="text" id ="uploadParams" vlaue = "uploadParams" />
    <input type = "file" name = "uploadfile" id = "uploadfile" />
    <input type = "button" id = "btnSave" onclick = "uploadSubmit" />
</form>

JS處理,需要引用JQuery.js

function uploadSubmit() {
    if (!$("#uploadfile").val()) {
        console.log("上傳失敗,文件是空的");
        return false;
    }
    var paramValue = $("#uploadParams").val();
    var formData = new FormData($("#uploadForm"));
    formData.append("paramValue",paramValue);
    $.ajax({
        url: "your server url",
        type: "post",
        data: formdata,
        success: function (result) {
            console.log("上傳成功");
        },
        error: function (a, b, c) {
            console.log("失敗了");
        },
        complete: function () {
            console.log("請求最后處理的方法");
        },
    })
}

 

FormData對象的使用

FormData對象用以將數據編譯成鍵值對,以便用XMLHttpRequest來發送數據。其主要用於發送表單數據,但亦可用於發送帶鍵數據(keyed data),而獨立於表單使用。如果表單enctype屬性設為multipart/form-data ,則會使用表單的submit()方法來發送數據,從而,發送數據具有同樣形式。

可以創建一個FormData對象,然后調用它的append()方法來添加字段。

后台Java處理:

@RequestMapping("upload")
public String upload(@RequestParam("uploadfile") MultipartFile file,@RequestParam("paramValue") String paramvalue,HttpServletRequest request){
    try{
        //得到文件"upload"的服務器路徑
        String sysPath=request.getSession().getServletContext().getRealPath("upload");
        String fileName=file.getOriginalFilename();    //得到文件名
        File filePath=new File(sysPath,fielName);    //得到文件路徑
        if(!filePath.getParentFile().exists()){    //判斷服務器當前路徑文件夾是否存在
            filePath.getParentFile().mkdirs();    //不存在則創建文件夾
        }
        BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(filePath));
        out.write(file.getBytes());
        out.flush();
        out.close();
    }catch(fileNotFoundException e){
        e.printStrackTrace();
        return "失敗";
    }catch(IOException e){
        e.printStrackTrace();
        return "失敗";
    }
}

 

BufferedOutputStream(緩沖輸出流),繼承於FilterOutputStrema,它的作用是為另一個輸出流提供“緩沖功能”,該類實現一個緩沖輸出流。通過設置這樣的輸出流,應用程序可以將字節寫入底層輸出流,而不必為寫入的每個字節調用底層系統。

方法總結
修飾符和類型 方法和描述
void

flush()

刷新此緩沖輸出流。

void

write(byte[] b,int off,int len)

從指定字節數組的偏移處開始將len字節寫入此緩沖輸出流。

void

write(int b)

將指定的字節寫入此緩沖輸出流。

多文件上傳:

與單文件差別不大:前端多個<input type="file">,后端接收的時候方法參數使用數組:

@RequestParam("param") MultipartFile []  file

參考:Multipart 官方API


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM