天天看點

axios檔案上傳 formdata_vue使用axios上傳檔案(FormData)的方法

在此主要介紹 如何使用 formData 對象上傳單檔案和多檔案,FormData 就是 XMLHttpRequest Level 2 新增的一個對象,利用它來送出表單、模拟表單送出,當然最大的優勢就是可以上傳二進制檔案。

過多介紹不說,過多的煽情語句不說,直接來活,希望對廣大博友有所幫助。也希望各位大神不吝賜教

1.前台上傳檔案的表單和響應函數

送出

表單可以根據自己需要選擇合适的表單,我在此選用的原生表單。

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);

})

},

看到這裡是不是感覺很搞笑,單檔案和多檔案的差別竟然在于向 formData 中添加了多少個檔案。其實技術就是這樣,玩過了,就覺得很好玩越來越有興趣。

注: http.uploadFile 是我自己封裝的方法,用來上傳檔案的,為了防止文章沒有針對性,就分開寫了。

axios 和 ajax 都支援異步請求,兩者使用方法大同小異,在此使用 axios 上傳檔案的請求。使用的時候隻需要在響應的 vue 元件中引入就可以。import Vue from 'vue';

import VueCookie from 'vue-cookie';

import axios from 'axios';

// import toastr from '../assets/toastr.min';

// Vue.use(axios)

let http = {};

// let _baseURL = '/vpaas'

let _baseURL = 'http://localhost:8080/vpaas'

let ContentType = "application/json";

let uploadFileType = "multipart/form-data";

http.baseURL = _baseURL;

http.uploadFile = function (url, data) {

let config = {

//請求的接口,在請求的時候,如axios.get(url,config);這裡的url會覆寫掉config中的url

url: url,

//基礎url字首

baseURL: _baseURL,

transformResponse: [function (data1) {

var data = data1;

if (typeof data1 == "string") {

data = JSON.parse(data1);

}

//這裡提前處理傳回的資料;

if (data.message && (data.data === 'login.invalid.token')) {

window.localStorage.removeItem("access-user");

alert("逾時請重新登陸");

window.location.href = '/';

}

return data;

}],

//請求頭資訊

headers: {'access-user': window.localStorage.getItem('access-user'), 'Content-Type': uploadFileType},

//跨域請求時是否需要使用憑證

withCredentials: true,

// 傳回資料類型

responseType: 'json', //default

};

return axios.post(url, data, config);

};

哪裡了解有誤,歡迎各位大神不吝指教。

2:背景接受檔案

控制器主要有一個全局的注解:@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 循環就可以取出所有的檔案,這裡就不做一一解釋了。

方法都已經親測,希望對廣大博友有絲毫的幫助。也希望大家多多支援愛安網。