【轉】vue 使用 axios 上傳文件 --- FormData


原文鏈接: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 循環就可以取出所有的文件,這里就不做一一解釋了。    


免責聲明!

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



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