本文整理了前端經常使用的下載文件以及上傳文件的方法
例子均以vue
+element ui
+axios
爲例,不使用el
封裝好的上傳組件,這裏自行進行封裝實現前端
以圖片爲例,文件上傳能夠省略預覽圖片功能
圖片上傳可使用2種方式:文件流
和base64
;vue
上傳
+預覽
:<input type="file" id='imgBlob' @change='changeImgBlob' /> <el-image style="width: 100px; height: 100px" :src="imgBlobSrc"></el-image>
// data imgBlobSrc: "" // methods changeImgBlob() { let file = document.querySelector("#imgBlob"); /** *圖片預覽 *更適合PC端,兼容ie7+,主要功能點是window.URL.createObjectURL */ var ua = navigator.userAgent.toLowerCase(); if (/msie/.test(ua)) { this.imgBlobSrc = file.value; } else { this.imgBlobSrc = window.URL.createObjectURL(file.files[0]); } //上傳後臺 const fd = new FormData(); fd.append("files", file.files[0]); fd.append("xxxx", 11111); //其餘字段,根據實際狀況來 axios({ url: "/yoorUrl", //URL,根據實際狀況來 method: "post", headers: { "Content-Type": "multipart/form-data" }, data: fd }); }
瀏覽器network
查看img
元素查看src
,爲blob
類型
ios
上傳
+預覽
:<input type="file" id='imgBase' @change='changeImgBase' /> <el-image style="width: 100px; height: 100px" :src="imgBaseSrc"></el-image>
// data imgBaseSrc : "" // methods changeImgBase() { let that = this; let file = document.querySelector("#imgBase"); /** *圖片預覽 *更適合H5頁面,兼容ie10+,圖片base64顯示,主要功能點是FileReader和readAsDataURL */ if (window.FileReader) { var fr = new FileReader(); fr.onloadend = function (e) { that.imgBaseSrc = e.target.result; //上傳後臺 axios({ url: "/yoorUrl", //URL,根據實際狀況來 method: "post", data: { files: that.imgBaseSrc } }); }; fr.readAsDataURL(file.files[0]); } }
瀏覽器network
查看
axios
img
元素查看src
,爲base64
類型
segmentfault
假設須要下載圖片爲url
,文件流
處理和這個同樣瀏覽器
<el-image style="width: 100px; height: 100px" :src="downloadImgSrc"></el-image> <el-button type="warning" round plain size="mini" @click='downloadImg'>點擊下載</el-button>
responseType
爲blob
//data downloadImgSrc:'https://i.picsum.photos/id/452/400/300.jpg?hmac=0-o_NOka_K6sQ_sUD84nxkExoDk3Bc0Qi7Y541CQZEs' //methods downloadImg() { axios({ url: this.downloadImgSrc, //URL,根據實際狀況來 method: "get", responseType: "blob" }).then(function (response) { const link = document.createElement("a"); let blob = new Blob([response.data], { type: response.data.type }); let url = URL.createObjectURL(blob); link.href = url; link.download = `實際須要的文件名.${response.data.type.split('/')[1]}`; link.click(); document.body.removeChild(link); }); }
<el-image style="width: 100px; height: 100px" :src="downloadImgSrc"></el-image> <el-button type="warning" round plain size="mini" @click='downloadImg'>點擊下載</el-button>
responseType
爲blob
//data downloadImgSrc:'https://i.picsum.photos/id/452/400/300.jpg?hmac=0-o_NOka_K6sQ_sUD84nxkExoDk3Bc0Qi7Y541CQZEs' //methods downloadImg() { axios({ url: this.downloadImgSrc, //URL,根據實際狀況來 method: "get", responseType: "blob" }).then(function (response) { const link = document.createElement("a"); let blob = new Blob([response.data], { type: response.data.type }); let url = URL.createObjectURL(blob); link.href = url; link.download = `實際須要的文件名.${response.data.type.split('/')[1]}`; link.click(); document.body.removeChild(link); }); }
圖片上傳可使用2種方式文件流
和Base64
圖片下載同理。
更多問題歡迎加入前端交流羣交流749539640app