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

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

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

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

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

<script>
export default {
  data() {
    return {
	  ruleForm: {
        coverUrl: "",
        coverFile: ""
      },
    };
  },
  methods: {
    imgUrlToFile(url) {
      var self = this;
      var imgLink = url;
      var tempImage = new Image();
      //如果圖片url是網(wǎng)絡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對象,所以用以下方法兼容
      blob.lastModifiedDate = new Date();
      blob.name = filename;
      return blob;
    },
    getFileName(url) {
      // 獲取到文件名
      let pos = url.lastIndexOf("/"); // 查找最后一個/的位置
      return url.substring(pos + 1); // 截取最后一個/位置到字符長度,也就是截取文件名
    }
  }
};
</script>

axios上傳

注意:

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

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

vue項目中使用axios上傳圖片等文件

首先安裝axios

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

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

3.直接利用cdn引入

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

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

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

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

html代碼:

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

js代碼:

import axios from 'axios'
// 添加請求頭
update (e) {   // 上傳照片
      var self = this
      let file = e.target.files[0]
      /* eslint-disable no-undef */
      let param = new FormData()  // 創(chuàng)建form對象
      param.append('file', file)  // 通過append向form對象添加數(shù)據(jù)
      param.append('chunk', '0') // 添加form表單中其他數(shù)據(jù)
      console.log(param.get('file')) // FormData私有類對象,訪問不到,可以通過get判斷值是否傳進去
      let config = {
        headers: {'Content-Type': 'multipart/form-data'}
      }
     // 添加請求頭
    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é)

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

相關(guān)文章

  • vue實現(xiàn)點擊按鈕“查看詳情”彈窗展示詳情列表操作

    vue實現(xiàn)點擊按鈕“查看詳情”彈窗展示詳情列表操作

    這篇文章主要介紹了vue實現(xiàn)點擊按鈕“查看詳情”彈窗展示詳情列表操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Vue.js 單頁面多路由區(qū)域操作的實例詳解

    Vue.js 單頁面多路由區(qū)域操作的實例詳解

    這篇文章主要介紹了 Vue.js 單頁面多路由區(qū)域操作的實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • VUE指令和pinia控制按鈕權(quán)限示例詳解

    VUE指令和pinia控制按鈕權(quán)限示例詳解

    這篇文章主要為大家介紹了VUE指令和pinia控制按鈕權(quán)限示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Vue.js移動端左滑刪除組件的實現(xiàn)代碼

    Vue.js移動端左滑刪除組件的實現(xiàn)代碼

    本篇文章主要介紹了Vue.js移動端左滑刪除組件的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Vue3+Element?Plus按需引入(自動導入)詳解

    Vue3+Element?Plus按需引入(自動導入)詳解

    element-plus根據(jù)官網(wǎng)文檔,推薦用戶采用按需導入的方式進行導入,下面這篇文章主要給大家介紹了關(guān)于Vue3+Element?Plus按需引入(自動導入)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • Vue.js中$refs{}如何獲取DOM元素

    Vue.js中$refs{}如何獲取DOM元素

    這篇文章主要介紹了Vue.js中$refs{}如何獲取DOM元素問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue如何實現(xiàn)table表格置頂

    Vue如何實現(xiàn)table表格置頂

    這篇文章主要介紹了Vue如何實現(xiàn)table表格置頂,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue實現(xiàn)計算器計算效果

    Vue實現(xiàn)計算器計算效果

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)計算器計算效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 詳解vue中父子組件傳遞參數(shù)props的實現(xiàn)方式

    詳解vue中父子組件傳遞參數(shù)props的實現(xiàn)方式

    這篇文章主要給大家介紹了在vue中,父子組件傳遞參數(shù)?props?實現(xiàn)方式,文章通過代碼示例介紹的非常詳細,對我們的學習或工作有一定的參考價值,需要的朋友可以參考下
    2023-07-07
  • Vue 實現(xiàn)從小到大的橫向滑動效果詳解

    Vue 實現(xiàn)從小到大的橫向滑動效果詳解

    這篇文章主要介紹了Vue 實現(xiàn)從小到大的橫向滑動效果,結(jié)合實例形式詳細分析了vue.js橫向漸變滑動效果的實現(xiàn)步驟、相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2019-10-10

最新評論