原文鏈接:https://blog.csdn.net/nimoyaoww/article/details/79400885
在此主要介紹 如何使用 formData 對象上傳單文件和多文件,FormData 就是 XMLHttpRequest Level 2 新增的一個對象,利用它來提交表單、模擬表單提交,當然最大的優勢就是可以上傳二進制文件。
一: 前台上傳文件的表單和響應函數
<!--文件上傳表單--> <form> <input type="text" value="" v-model="name" placeholder="請輸入用戶名"> <input type="text" value="" v-model="age" placeholder="請輸入年齡"> <input type="file" @change="getFile($event)"> <input type="file" @change="getFile2($event)"> <button @click="submit($event)">提交</button> </form>
表單可以根據自己需要選擇合適的表單,我在此選用的原生表單。
vue 定義文件數據類型:
data () { return{ //文件 file: '', file2: '', } },
表單按鈕的響應函數
getFile(event) { this.file = event.target.files[0]; console.log(this.file); }, getFile2(event) { this.file2 = event.target.files[0]; console.log(this.file2); },
上傳單文件和多文件其實都是一樣,主要的區別在后台接受文件形式和前台如何向后台傳遞數據,主要區別在 submit 響應函數中。
單文件例子:
submit(event) { event.preventDefault();//取消默認行為 //創建 formData 對象 let formData = new FormData(); // 向 formData 對象中添加文件 formData.append('file',this.file); http.uploadFile("taskManage/uploadFile2",formData).then(function (response) { console.log("res: ",response); }) },
多文件例子:
submit(event) { event.preventDefault();//取消默認行為 //創建 formData 對象 let formData = new FormData(); // 向 formData 對象中添加文件 formData.append('file',this.file); formData.append('file',this.file2); http.uploadFile("taskManage/uploadFile2",formData).then(function (response) { console.log("res: ",response); }) },
注: http.uploadFile 是原作者自己封裝的方法,用來上傳文件的,為了防止文章沒有針對性,就分開寫了。有需要的,請查閱:http://blog.csdn.net/nimoyaoww/article/details/79401346
此時如果想在前台打印文件信息使用如下方式:
console.log(formData);//輸出為空 console.log(formData.get("file"));//單文件 console.log(formData.getAll("file"));//多文件
二、后台接受文件
控制器主要有一個全局的注解:
@RequestMapping("taskManage")
單文件的格式:
/** * 文件接收控制器 */ @PostMapping("uploadFile") public Object multipleSave(@RequestParam("file") MultipartFile file){ logger.info("上傳的文件:",file); logger.info("上傳的文件"); return null; }
多文件格式:
后台接受方式有兩種,兩種都有不同的通途。
接受的文件個數為有限個時:
/** * 文件接收控制器 */ @PostMapping("uploadFile") public Object multipleSave(@RequestParam("file") MultipartFile file,@RequestParam("file2") MultipartFile file2){ logger.info("上傳的文件:",file); logger.info("上傳的文件2:",file2); logger.info("上傳的文件"); return null; }
接受文件個數為無限個時:
@PostMapping("uploadFile") public Object multipleSave(@RequestParam("file") MultipartFile[] file){ logger.info("上傳的文件:",file); logger.info("上傳的文件"); return null; }
利用數組的格式接收多文件,利用 for 循環就可以取出所有的文件,這里就不做一一解釋了。