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

vue實(shí)現(xiàn)圖片路徑轉(zhuǎn)二進(jìn)制文件流(binary)

 更新時(shí)間:2022年06月02日 10:39:42   作者:showkw  
這篇文章主要介紹了vue實(shí)現(xiàn)圖片路徑轉(zhuǎn)二進(jìn)制文件流(binary),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

圖片路徑轉(zhuǎn)二進(jìn)制文件流(binary)

vue項(xiàng)目中,需要將本地的圖片或前端生成的圖片傳回后端,傳回給后端需要將圖片路徑轉(zhuǎn)換為二進(jìn)制文件流,也就是參數(shù)中顯示的(binary),這時(shí)就需要進(jìn)行圖片路徑的轉(zhuǎn)換。

圖片路徑轉(zhuǎn)換為Base64

imageUrlToBase64(imageUrl) {
? let image = new Image() // 一定要設(shè)置為let,不然圖片不顯示
? image.setAttribute('crossOrigin', 'anonymous') // 解決跨域問題
? image.src = imageUrl +"&v=" + Math.random()
? image.onload = () => {
? ? var canvas = document.createElement("canvas")
?? ?canvas.width = image.width
?? ?canvas.height = image.height
?? ?var context = canvas.getContext('2d')
?? ?context.drawImage(image, 0, 0, image.width, image.height)
?? ?var quality = 0.8
?? ?var dataURL = canvas.toDataURL("image/jpeg", quality) // 使用toDataUrl將圖片轉(zhuǎn)換成jpeg的格式,不要把圖片壓縮成png,因?yàn)閴嚎s成png后base64的字符串可能比不轉(zhuǎn)換前的長(zhǎng)!
? ? this.base64toFile(dataURL)
? }
}

Base64轉(zhuǎn)換為二進(jìn)制文件流(binary)

base64toFile (dataurl, filename = 'file') {
? let arr = dataurl.split(',')
? let mime = arr[0].match(/:(.*?);/)[1]
? let suffix = mime.split('/')[1]
? let bstr = atob(arr[1])
? let n = bstr.length
? let u8arr = new Uint8Array(n)
? while (n--) {
? ? u8arr[n] = bstr.charCodeAt(n)
? }
? let file = new File([u8arr], `${filename}.${suffix}`, {
? ? type: mime
? })
? console.log(file)
}

下載二進(jìn)制流文件

平時(shí)在前端下載文件有兩種方式,一種是后臺(tái)提供一個(gè) URL,然后用 window.open(URL) 下載;另一種是后臺(tái)直接返回文件的二進(jìn)制內(nèi)容,然后前端轉(zhuǎn)化再下載,下面主要說的是第二種實(shí)現(xiàn)方式

Blob、ajax(axios)

mdn 上是這樣介紹 Blob 的:

Blob 對(duì)象表示一個(gè)不可變、原始數(shù)據(jù)的類文件對(duì)象。Blob 表示的不一定是JavaScript原生格式的數(shù)據(jù)

具體使用

axios({
? method: 'post',
? url: '/export',
})
.then(res => {
? // 假設(shè) data 是返回來的二進(jìn)制數(shù)據(jù)
? const data = res.data
? const url = window.URL.createObjectURL(new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}))
? const a = document.createElement('a')
? a.href = url
? a.click()
? // const link = document.createElement('a')
? // link.style.display = 'none'
? // link.href = url
? // link.setAttribute('download', 'excel.xlsx')
? // document.body.appendChild(link)
? // link.click()
? // document.body.removeChild(link)
})

打開下載的文件,一堆亂碼…一定有哪里不對(duì)。

最后發(fā)現(xiàn)是參數(shù) responseType 的問題,responseType 它表示服務(wù)器響應(yīng)的數(shù)據(jù)類型,由于后臺(tái)返回來的是二進(jìn)制數(shù)據(jù),所以我們要把它設(shè)為 arraybuffer, 接下來再看看結(jié)果是否正確。

axios({
? method: 'post',
? url: '/export',
? responseType: 'arraybuffer',
})
.then(res => {
? // 假設(shè) data 是返回來的二進(jìn)制數(shù)據(jù)
? const data = res.data
? const url = window.URL.createObjectURL(new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}))
? const a = document.createElement('a')
? a.href = url
? a.click()
? // const link = document.createElement('a')
? // link.style.display = 'none'
? // link.href = url
? // link.setAttribute('download', 'excel.xlsx')
? // document.body.appendChild(link)
? // link.click()
? // document.body.removeChild(link)
})

這次沒有問題,文件能正常打開,內(nèi)容也是正常的,不再是亂碼。 

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

相關(guān)文章

  • vue3+vite使用環(huán)境變量.env的一些配置情況詳細(xì)說明

    vue3+vite使用環(huán)境變量.env的一些配置情況詳細(xì)說明

    開發(fā)中經(jīng)常會(huì)使用環(huán)境變量,Vite相比于Webpack也有一定的變化,下面這篇文章主要給大家介紹了關(guān)于vue3+vite使用環(huán)境變量.env的一些配置情況說明的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • vue中同步方法的實(shí)現(xiàn)

    vue中同步方法的實(shí)現(xiàn)

    這篇文章主要介紹了vue中同步方法的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Vue中使用jsencrypt進(jìn)行RSA非對(duì)稱加密的操作方法

    Vue中使用jsencrypt進(jìn)行RSA非對(duì)稱加密的操作方法

    這篇文章主要介紹了Vue中使用jsencrypt進(jìn)行RSA非對(duì)稱加密,在這里需要注意要加密的數(shù)據(jù)必須是字符串,對(duì)Vue?RSA非對(duì)稱加密相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-04-04
  • 解決vue中修改export default中腳本報(bào)一大堆錯(cuò)的問題

    解決vue中修改export default中腳本報(bào)一大堆錯(cuò)的問題

    今天小編就為大家分享一篇解決vue中修改export default中腳本報(bào)一大堆錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 圖文詳解vue中proto文件的函數(shù)調(diào)用

    圖文詳解vue中proto文件的函數(shù)調(diào)用

    這篇文章主要給大家介紹了vue中proto文件函數(shù)調(diào)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • vue中$event使用之獲取當(dāng)前元素及相關(guān)元素

    vue中$event使用之獲取當(dāng)前元素及相關(guān)元素

    這篇文章主要介紹了vue中$event使用之獲取當(dāng)前元素及相關(guān)元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue項(xiàng)目中錨點(diǎn)定位替代方式

    vue項(xiàng)目中錨點(diǎn)定位替代方式

    今天小編就為大家分享一篇vue項(xiàng)目中錨點(diǎn)定位替代方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue3實(shí)現(xiàn)粒子動(dòng)態(tài)背景的示例詳解

    Vue3實(shí)現(xiàn)粒子動(dòng)態(tài)背景的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Vue3實(shí)現(xiàn)粒子動(dòng)態(tài)背景,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-11-11
  • VUE生命周期全面系統(tǒng)詳解

    VUE生命周期全面系統(tǒng)詳解

    Vue的生命周期就是vue實(shí)例從創(chuàng)建到銷毀的全過程,也就是new?Vue()?開始就是vue生命周期的開始。Vue?實(shí)例有?個(gè)完整的?命周期,也就是從開始創(chuàng)建、初始化數(shù)據(jù)、編譯模版、掛載Dom?->?渲染、更新?->?渲染、卸載?等?系列過程,稱這是Vue的?命周期
    2022-07-07
  • vue?批量自動(dòng)引入并注冊(cè)組件或路由實(shí)現(xiàn)詳解

    vue?批量自動(dòng)引入并注冊(cè)組件或路由實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了vue?批量自動(dòng)引入并注冊(cè)組件或路由實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07

最新評(píng)論

彰化市| 抚州市| 琼结县| 郧西县| 岢岚县| 邵阳县| 河东区| 兰州市| 包头市| 定州市| 无极县| 佛坪县| 黄龙县| 广南县| 衡山县| 淮北市| 张北县| 游戏| 奇台县| 富川| 济源市| 新平| 额尔古纳市| 松潘县| 沾益县| 塔河县| 航空| 新宁县| 太原市| 英德市| 策勒县| 奉新县| 屏山县| 环江| 额尔古纳市| 佛坪县| 潞城市| 常熟市| 蕉岭县| 太仆寺旗| 东平县|