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

js實(shí)現(xiàn)base64文件的處理以及下載方法

 更新時(shí)間:2024年07月09日 11:09:07   作者:今后剛睡醒  
Base64是一種將二進(jìn)制數(shù)據(jù)編碼為ASCII字符的編碼方式,這篇文章主要給大家介紹了關(guān)于js實(shí)現(xiàn)base64文件的處理以及下載的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

獲取完整base64地址

//獲取后端返回的不完成base64、文件名、文件類型
function downladBase64(item) {
    APINAME().then((res) => {
            let base64 = getBase64Type(res.data.fileType) + res.data.data //類型拼接后端給的不完整base64
            console.log('拼接完整的base64', base64)
            downloadFileByBase64(base64, res.data.fileName)
    })
}

//根據(jù)文件后綴 獲取base64前綴不同 拼接完整的base64
function getBase64Type(type) {
    switch (type) {
        case 'txt':
            return 'data:text/plain;base64,'
        case 'doc':
            return 'data:application/msword;base64,'
        case 'docx':
            return 'data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,'
        case 'xls':
            return 'data:application/vnd.ms-excel;base64,'
        case 'xlsx':
            return 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,'
        case 'pdf':
            return 'data:application/pdf;base64,'
        case 'pptx':
            return 'data:application/vnd.openxmlformats-officedocument.presentationml.presentation;base64,'
        case 'ppt':
            return 'data:application/vnd.ms-powerpoint;base64,'
        case 'png':
            return 'data:image/png;base64,'
        case 'jpg':
            return 'data:image/jpeg;base64,'
        case 'gif':
            return 'data:image/gif;base64,'
        case 'svg':
            return 'data:image/svg+xml;base64,'
        case 'ico':
            return 'data:image/x-icon;base64,'
        case 'bmp':
            return 'data:image/bmp;base64,'
    }
}

base64轉(zhuǎn)Blob

//將完整的base64轉(zhuǎn)換為blob
function dataURLtoBlob(dataurl) {
    var arr = dataurl.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 })
}

base64轉(zhuǎn)File

// 將base64轉(zhuǎn)換為文件
export default async function base64ImgtoFile(dataurl, filename = 'file') {
    try {
        const arr = dataurl.split(',')
        const mime = arr[0].match(/:(.*?);/)[1]
        const suffix = mime.split('/')[1]
        const bstr = atob(arr[1])
        let n = bstr.length
        const u8arr = new Uint8Array(n)
        while (n--) {
            u8arr[n] = bstr.charCodeAt(n)
        }
        return new File([u8arr], `${filename}.${suffix}`, {
            type: mime
        })
    } catch (err) {
        return Promise.reject(err);
    }
}

下載base64文件

// * desc: 下載參數(shù)入口
// * @param base64  :返回?cái)?shù)據(jù)的blob對(duì)象或鏈接
// * @param fileName  :下載后文件名標(biāo)記
function downloadFileByBase64(base64, fileName) {
    var myBlob = dataURLtoBlob(base64)
    var myUrl = URL.createObjectURL(myBlob)
    downloadFile(myUrl, fileName)
}
// * desc: 下載方法
// * @param url  :返回?cái)?shù)據(jù)的blob對(duì)象或鏈接
// * @param fileName  :下載后文件名標(biāo)記
function downloadFile(url, name = "What's the fuvk") {
    console.log('url==', url)
    var a = document.createElement("a")
    a.setAttribute("href", url)
    a.setAttribute("download", name)
    a.setAttribute("target", "_blank")
    let clickEvent = document.createEvent("MouseEvents")
    clickEvent.initEvent("click", true, true)
    a.dispatchEvent(clickEvent)
}
export default downloadFileByBase64

下載圖片

export const downloadImage = (imgsrc, name) => { // 下載圖片地址和圖片名
  var image = new Image()
  image.setAttribute('crossOrigin', 'anonymous')
  image.onload = function() {
    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 url = canvas.toDataURL('image/png') // 得到圖片的base64編碼數(shù)據(jù)

    var a = document.createElement('a') // 生成一個(gè)a元素
    var event = new MouseEvent('click') // 創(chuàng)建一個(gè)單擊事件
    a.download = name || 'photo' // 設(shè)置圖片名稱
    a.href = url // 將生成的URL設(shè)置為a.href屬性
    a.dispatchEvent(event) // 觸發(fā)a的單擊事件
  }
  image.src = imgsrc
}

下載普通文件

/**
 * 下載文件
 *
 * @param {*} path 下載地址/下載請(qǐng)求地址。
 * @param {string} [name='name.jpg'] 下載文件的名字(考慮到兼容性問題,最好加上后綴名
 */
export const downloadFile = (path, name = 'name.jpg') => {
        const download = (href) => {
            const a = document.createElement('a')
            a.style.display = 'none'
            a.href = href
            a.download = name
            document.body.appendChild(a)
            a.click()
            document.body.removeChild(a)
        }

        if (isIE()) {
            download(path)
        } else {
            const xhr = new XMLHttpRequest()
            xhr.open('get', path)
            xhr.responseType = 'blob'
            xhr.send()
            xhr.onload = (e) => {
                const { status, response } = e.target
                if (status === 200 || status === 304) {
                    const fileReader = new FileReader()
                    fileReader.readAsDataURL(response)
                    fileReader.onload = (ev) => {
                        download(ev.target.result)
                    }
                }
            }
        }
    }
    // 判斷是否IE
export function isIE() {
    return /msie|trident/.test(window.navigator.userAgent.toLowerCase())
}

批量下載文件并導(dǎo)出為zip

import JSZip from 'jszip'
import FileSaver from 'file-saver'
import axios from 'axios'
// 批量導(dǎo)出
function getFile(url) {
    return new Promise((resolve, reject) => {
        axios({
            method: 'get',
            url,
            responseType: 'arraybuffer'
        }).then(data => {
            resolve(data.data)
        }).catch(error => {
            console.log(error, url, 'getfile-err')
                // reject(error.toString());
            resolve('')
        })
    })
}

/**
 * 
 * @param {Array} files 需要下載的文件對(duì)象數(shù)組[{name,url}]
 * @param {String} zipName 壓縮包名稱
 * @param {Function} callback 下載完成后的回調(diào)
 */
function batchDownZip(files, zipName, callback) {
    const data = files
    const zip = new JSZip()
    const cache = {}
    const promises = []
    data.forEach(item => {
        // console.log(getFile, 'getFile')
        const promise = getFile(item.url).then(result_file => { // 下載文件, 并存成ArrayBuffer對(duì)象
            let file_name = item.name // 獲取文件名
            let lastIndex = file_name.lastIndexOf('/')
            console.log(result_file, file_name, lastIndex, 'result_file111')
                //將所有文件放入同一級(jí)
            if (lastIndex > -1) {
                file_name = file_name.slice(lastIndex + 1)
            }
            console.log(result_file, file_name, lastIndex, 'result_file222')

            zip.file(file_name, result_file, { binary: true }) // 逐個(gè)添加文件
            cache[file_name] = data
        })
        promises.push(promise)
    })
    Promise.all(promises).then(() => {
        zip.generateAsync({ type: 'blob' }).then(content => {
            // 生成二進(jìn)制流
            FileSaver.saveAs(content, zipName) // 利用file-saver保存文件  自定義文件名
            callback && callback()
        })
    })
}

export default batchDownZip

總結(jié) 

到此這篇關(guān)于js實(shí)現(xiàn)base64文件的處理以及下載方法的文章就介紹到這了,更多相關(guān)js base64文件處理下載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javascrip關(guān)于繼承的小例子

    javascrip關(guān)于繼承的小例子

    javascrip關(guān)于繼承的小例子,需要的朋友可以參考一下
    2013-05-05
  • Webstorm開發(fā)uni-app項(xiàng)目詳細(xì)圖文教程

    Webstorm開發(fā)uni-app項(xiàng)目詳細(xì)圖文教程

    這篇文章主要介紹了使用WebStorm和UniappTool創(chuàng)建和運(yùn)行uni-app項(xiàng)目的相關(guān)資料,包括配置微信開發(fā)者工具和運(yùn)行項(xiàng)目,同時(shí)提到了創(chuàng)建新頁面和使用uniapptool存在的弊端,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • JS 判斷代碼全收集

    JS 判斷代碼全收集

    js判斷代碼,比較全,大家可以看下代碼,熟悉常見判斷代碼。
    2009-04-04
  • 深入理解JavaScript系列(13) This? Yes,this!

    深入理解JavaScript系列(13) This? Yes,this!

    在這篇文章里,我們將討論跟執(zhí)行上下文直接相關(guān)的更多細(xì)節(jié)。討論的主題就是this關(guān)鍵字。實(shí)踐證明,這個(gè)主題很難,在不同執(zhí)行上下文中this的確定經(jīng)常會(huì)發(fā)生問題
    2012-01-01
  • js前端傳json后臺(tái)接收‘‘被轉(zhuǎn)為quot的問題解決

    js前端傳json后臺(tái)接收‘‘被轉(zhuǎn)為quot的問題解決

    這篇文章主要介紹了js前端傳json后臺(tái)接收‘‘被轉(zhuǎn)為"的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • js中eval方法詳解之eval方法的初級(jí)應(yīng)用

    js中eval方法詳解之eval方法的初級(jí)應(yīng)用

    js中eval()函數(shù)可計(jì)算某個(gè)字符串,下面這篇文章主要給大家介紹了關(guān)于js中eval方法詳解之eval方法的初級(jí)應(yīng)用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • 關(guān)于TypeScript中import JSON的正確姿勢(shì)詳解

    關(guān)于TypeScript中import JSON的正確姿勢(shì)詳解

    2012年10月首度對(duì)外公布typescript(當(dāng)時(shí)已經(jīng)是0.7?的版本)同時(shí)開源,ts的編譯器是用js編寫的(后來改成ts?),可以在線編寫。下面這篇文章主要給大家介紹了關(guān)于TypeScript中import JSON的正確姿勢(shì),需要的朋友可以參考下。
    2017-07-07
  • JS實(shí)現(xiàn)簡(jiǎn)單的抽獎(jiǎng)轉(zhuǎn)盤效果示例

    JS實(shí)現(xiàn)簡(jiǎn)單的抽獎(jiǎng)轉(zhuǎn)盤效果示例

    這篇文章主要介紹了JS實(shí)現(xiàn)簡(jiǎn)單的抽獎(jiǎng)轉(zhuǎn)盤效果,涉及javascript數(shù)值計(jì)算與頁面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-02-02
  • 最簡(jiǎn)單的JavaScript圖片輪播代碼(兩種方法)

    最簡(jiǎn)單的JavaScript圖片輪播代碼(兩種方法)

    基于javascript代碼實(shí)現(xiàn)最簡(jiǎn)單的圖片輪播效果,非常簡(jiǎn)單,本文通過兩種方式給大家介紹最簡(jiǎn)單的圖片輪播,感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • JavaScript設(shè)計(jì)模式經(jīng)典之工廠模式

    JavaScript設(shè)計(jì)模式經(jīng)典之工廠模式

    工廠模式定義一個(gè)用于創(chuàng)建對(duì)象的接口,這個(gè)接口由子類決定實(shí)例化哪一個(gè)類。接下來通過本文給大家介紹JavaScript設(shè)計(jì)模式經(jīng)典之工廠模式,感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02

最新評(píng)論