欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue項(xiàng)目如何根據(jù)圖片url獲取file對(duì)象并用axios上傳

 更新時(shí)間:2023年09月26日 09:47:26   作者:看門貓  
這篇文章主要介紹了Vue項(xiàng)目如何根據(jù)圖片url獲取file對(duì)象并用axios上傳問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue根據(jù)圖片url獲取file對(duì)象并用axios上傳

圖片url轉(zhuǎn)file對(duì)象

<script>
export default {
  data() {
    return {
	  ruleForm: {
        coverUrl: "",
        coverFile: ""
      },
    };
  },
  methods: {
    imgUrlToFile(url) {
      var self = this;
      var imgLink = url;
      var tempImage = new Image();
      //如果圖片url是網(wǎng)絡(luò)url,要加下一句代碼
      tempImage.crossOrigin = "*";
      tempImage.onload = function() {
        var base64 = self.getBase64Image(tempImage);
        var imgblob = self.base64toBlob(base64);
        var filename = self.getFileName(self.ruleForm.coverUrl);
        self.ruleForm.coverFile = self.blobToFile(imgblob, filename);
      };
      tempImage.src = imgLink;
    },
    getBase64Image(img) {
      var canvas = document.createElement("canvas");
      canvas.width = img.width;
      canvas.height = img.height;
      var ctx = canvas.getContext("2d");
      ctx.drawImage(img, 0, 0, img.width, img.height);
      var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
      var dataURL = canvas.toDataURL("image/" + ext);
      return dataURL;
    },
    base64toBlob(base64) {
      let arr = base64.split(","),
        mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]),
        n = bstr.length,
        u8arr = new Uint8Array(n);
      while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
      }
      return new Blob([u8arr], { type: mime });
    },
    blobToFile(blob, filename) {
      // edge瀏覽器不支持new File對(duì)象,所以用以下方法兼容
      blob.lastModifiedDate = new Date();
      blob.name = filename;
      return blob;
    },
    getFileName(url) {
      // 獲取到文件名
      let pos = url.lastIndexOf("/"); // 查找最后一個(gè)/的位置
      return url.substring(pos + 1); // 截取最后一個(gè)/位置到字符長(zhǎng)度,也就是截取文件名
    }
  }
};
</script>

axios上傳

注意:

用以上方法得到file的對(duì)象在上傳時(shí),還必須在表單的append方法中增加文件名,否則后端收到的只是blob對(duì)象,而不是文件,如下:

submitForm() {
? ? //...
?? ?var filename = this.getFileName(this.ruleForm.coverUrl);
?? ?params.append(
?? ? ?"course_cover",
?? ? ?this.ruleForm.coverFile,
?? ? ?filename
?? ?);
?? ?//....
}

vue項(xiàng)目中使用axios上傳圖片等文件

首先安裝axios

1.利用npm安裝npm install axios –save

2.利用bower安裝bower install axios –save

3.直接利用cdn引入

一般情況上傳照片有兩種方式

1.本地圖片轉(zhuǎn)換成base64,然后通過普通的post請(qǐng)求發(fā)送到服務(wù)端。操作簡(jiǎn)單,適合小圖,以及如果想兼容低版本的ie沒辦法用此方法

2.通過form表單提交。form表單提交圖片會(huì)刷新頁面,也可以時(shí)form綁定到一個(gè)隱藏的iframe上,可以實(shí)現(xiàn)無刷新提交數(shù)據(jù)。

這里只講解一下第二種方式

html代碼:

<input name="file" type="file" accept="image/png,image/gif,image/jpeg" @change="update"/>

js代碼:

import axios from 'axios'
// 添加請(qǐng)求頭
update (e) {   // 上傳照片
      var self = this
      let file = e.target.files[0]
      /* eslint-disable no-undef */
      let param = new FormData()  // 創(chuàng)建form對(duì)象
      param.append('file', file)  // 通過append向form對(duì)象添加數(shù)據(jù)
      param.append('chunk', '0') // 添加form表單中其他數(shù)據(jù)
      console.log(param.get('file')) // FormData私有類對(duì)象,訪問不到,可以通過get判斷值是否傳進(jìn)去
      let config = {
        headers: {'Content-Type': 'multipart/form-data'}
      }
     // 添加請(qǐng)求頭
    axios.post('http://172.19.26.60:8081/rest/user/headurl', param, config)
        .then(response => {
          if (response.data.code === 0) {
            self.ImgUrl = response.data.data
          }
          console.log(response.data)
        })
    }

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論