最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2023年09月26日 09:47:26   作者:看門貓  
這篇文章主要介紹了Vue項(xiàng)目如何根據(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)絡(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對象,所以用以下方法兼容
      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項(xiàng)目中使用axios上傳圖片等文件

首先安裝axios

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

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

3.直接利用cdn引入

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

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

2.通過form表單提交。form表單提交圖片會刷新頁面,也可以時form綁定到一個隱藏的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'
// 添加請求頭
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判斷值是否傳進(jìn)去
      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)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Element Dialog對話框的使用示例

    Element Dialog對話框的使用示例

    這篇文章主要介紹了Element Dialog對話框的使用示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳解基于Vue cli開發(fā)修改外部組件Vant默認(rèn)樣式

    詳解基于Vue cli開發(fā)修改外部組件Vant默認(rèn)樣式

    這篇文章主要介紹了詳解基于Vue cli開發(fā)修改外部組件Vant默認(rèn)樣式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • vue3中effect函數(shù)到底是什么詳解

    vue3中effect函數(shù)到底是什么詳解

    Effect幾乎是Vue3.0中最重要的一個功能了,計(jì)算屬性監(jiān)聽函數(shù)都是基于effect實(shí)現(xiàn)的,下面這篇文章主要給大家介紹了關(guān)于vue3中effect函數(shù)到底是什么的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 一次在vue中使用post進(jìn)行excel表下載的實(shí)戰(zhàn)記錄

    一次在vue中使用post進(jìn)行excel表下載的實(shí)戰(zhàn)記錄

    最近遇到了需求,覺著有必要給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于一次在vue中使用post進(jìn)行excel表下載的實(shí)戰(zhàn)記錄,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Vue.js項(xiàng)目部署到服務(wù)器的詳細(xì)步驟

    Vue.js項(xiàng)目部署到服務(wù)器的詳細(xì)步驟

    這篇文章給大家介紹了Vue.js項(xiàng)目部署到服務(wù)器的詳細(xì)步驟,既然是部署到服務(wù)器,肯定是需要一個云的。具體思路步驟大家可以參考下本文
    2017-07-07
  • Vue組件基礎(chǔ)操作介紹

    Vue組件基礎(chǔ)操作介紹

    這篇文章主要介紹了Vue組件基礎(chǔ)操作,組件是vue.js最強(qiáng)大的功能之一,而組件實(shí)例的作用域是相互獨(dú)立的,這就意味著不同組件之間的數(shù)據(jù)無法相互進(jìn)行直接的引用
    2023-01-01
  • vue-router子路由的實(shí)現(xiàn)方式

    vue-router子路由的實(shí)現(xiàn)方式

    這篇文章主要介紹了vue-router子路由的實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • vue動態(tài)菜單、動態(tài)路由加載以及刷新踩坑實(shí)戰(zhàn)

    vue動態(tài)菜單、動態(tài)路由加載以及刷新踩坑實(shí)戰(zhàn)

    這篇文章主要給大家介紹了關(guān)于vue動態(tài)菜單、動態(tài)路由加載以及刷新踩坑的相關(guān)資料,踩的這些坑其實(shí)是挺常見的,大家可以看看,避免遇到的時候再踩到同樣的坑,需要的朋友可以參考下
    2021-10-10
  • vue如何根據(jù)條件判斷按鈕是否可以點(diǎn)擊

    vue如何根據(jù)條件判斷按鈕是否可以點(diǎn)擊

    這篇文章主要介紹了vue如何根據(jù)條件判斷按鈕是否可以點(diǎn)擊,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 關(guān)于Vue組件庫開發(fā)詳析

    關(guān)于Vue組件庫開發(fā)詳析

    這篇文章主要給大家介紹了關(guān)于Vue組件庫開發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07

最新評論

太保市| 大宁县| 和静县| 吉安县| 西昌市| 孟津县| 万源市| 修武县| 内黄县| 团风县| 深州市| 家居| 英吉沙县| 天气| 巩义市| 自贡市| 乌兰浩特市| 昌乐县| 竹北市| 陆河县| 禄劝| 济阳县| 都江堰市| 西峡县| 顺义区| 赣州市| 雅江县| 长武县| 通渭县| 太白县| 富裕县| 沅陵县| 桃源县| 紫金县| 弋阳县| 岳阳县| 黎川县| 长岭县| 密云县| 东城区| 巫溪县|