JavaScript如何将后端获取到的byte数组转为文件

 更新时间:2024年04月03日 10:30:55   作者:相与还  
这篇文章主要给大家介绍了关于JavaScript如何将后端获取到的byte数组转为文件的相关资料,文中通过代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下

前言

一般情况下,在我们写项目的时候,都会从后端获取到文件的数据,要么是base64,要么是byte数组,然后我们再通过拿到的数据额外做出来转换为文件的,那么这次教大家如何通过JavaScript将后端拿到的byte数组转为文件

步骤

首先,我们需要有一个前端界面触发方法,来一个简单的按钮

<button @click='byteToFile'>byte转文件</button>

上面,我写了一个按钮,如何绑定了一个方法名:byteToFile

然后,我们需要拿到后端传给我们的byte数组:

let bytes = // 后端byte数组

形式如:

接着下一步,为了保证转换出来的文件能够正常的读取,我们需要知道需要把文件转换为什么格式于是我这边写一个常用的读取文件格式的方法供大家参考:

// 传入一个字符串,返回对应的文件格式类型
        extToMimes(ext) {
            let type = undefined;
            switch (ext) {
            		// 对应图片格式jpg
                case 'jpg':
                    type = 'image/jpeg'
                    // 对应图片格式png
                case 'png':
                    type = 'image/png'
                    // 对应图片格式jpeg
                case 'jpeg':
                    type = 'image/jpeg'
                    break;
                    // 对应图片格式gif
                case 'gif':
                	type ='image/gif'
                	break;
                	// 对应图片格式bmp
                case 'bmp:
                	type = 'image/bmp'
                	break;
                	// 对应文本格式txt
                case 'txt':
                    type = 'text/plain'
                    break;
                    // 对应表格格式xls
                case 'xls':
                    type = 'application/vnd.ms-excel'
                    break;
                    // 对应word文档doc格式
                case 'doc':
                    type = 'application/msword'
                    break;
                    // 对应文档格式pdf
                 case 'pdf':
                 	type = 'application/pdf'
                 	break;
                    // 对应表格格式xlsx
                case 'xlsx':
                    type = 'application/vnd.ms-excel'
                    break;
                    // 对应表格格式csv
                case 'csv':
                    type = 'text/csv'
                    break;
                    // 对应的视频格式一般是MPEG-4或者H.264编码的MP4格式
                case 'mp4':
                	type = 'video/mp4'
                	break;
                	// 对应的视频格式一般是AVI格式
               	case 'avi':
               		type = 'video/x-msvideo'
               		break;
               		// 对应的视频格式一般是Windows Media Video格式
               	case 'WindowsMediaVideo':
               		type = 'video/x-ms-wmv'
               		break;
               		// 对应的视频格式一般是MOV格式,由苹果公司开发的
               	case 'mov':
               		type = 'video/quicktime'
               		break;
               		//  对应的视频格式一般是Flash视频格式,由Adobe公司开发的
               	case 'flash':
               		type = 'video/x-flv'
               		break;
               		// 对应的视频格式一般是MKV格式,开源免费的多媒体容器格式
               	case 'mkv':
               		type = 'video/x-matroska'
               		break;
               		// 对应音频格式mp3
               	case 'mp3':
               		type = 'audio/mpeg'
               		break;
               		// 对应音频格式wav
               	case 'wav':
               		type = 'audio/wav'
               		break;
               		// 对应音频格式flac
               	case 'flac':
               		type = 'audio/flac'
               		break;
               		// 对应音频格式aac
               		type = 'audio/aac'
               		break;
               		// 对应音频格式WMA
               	case 'wma':
               		type = 'audio/x-ms-wma'
               		break;
                default:
                	type = 'text/plain'
                	break;
            }
            return type;
        },

文件格式有了之后正式的将byte数组转文件

/**
byte : 后端接收到的byte数组
_type : 文件类型
name : 文件名称,不带后缀
*/
        byteToFile(byte,_type,name) {
        	// 调用上面写的方法,读取获取到文件格式
            let fileType = this.extToMimes(_type);
            // 将后端的byte数组进行处理
            const bytes = new Uint8Array(byte);
            // 将byte数组转换为blob类型
            var blob = new Blob([bytes],{type: fileType});
            console.log("转换后文件:",blob)
            // 以上blob可直接拿来使用做自己的逻辑操作
            // 以下将blob转为File文件类型
            blob1.lastModifiedDate = new Date(); // 使用当前时间作为文件的修改时间
            blob1.name = name; // 指定文件名
            var file = new File([blob], name);
            console.log("File类型文件:",file)
            return file;
        },

假如你不需要获取转换后的文件,想直接下载,参考如下逻辑

/**
byte : 后端接收到的byte数组
_type : 文件类型
name : 文件名称,不带后缀
*/
        byteToFile(byte,_type,name) {
        	// 调用上面写的方法,读取获取到文件格式
            let fileType = this.extToMimes(_type);
            // 将后端的byte数组进行处理
            const bytes = new Uint8Array(byte);
            // 将byte数组转换为blob类型
            var blob = new Blob([bytes],{type: fileType});
            // 创建一个a标签,设置不可见
            var eleLink = document.createElement('a');
            eleLink.download = name;
            eleLink.style.display = 'none';
            // 将文件加入到a标签
            eleLink.href = URL.createObjectURL(blob);
            // 自动触发点击
            document.body.appendChild(eleLink);
            eleLink.click();
            // 最后移除a标签
            document.body.removeChild(eleLink);
        },

结语

以上就是byte数组转文件的过程

到此这篇关于JavaScript如何将后端获取到的byte数组转为文件的文章就介绍到这了,更多相关JS后端获取byte数组转文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Async Validator 异步验证使用说明

    Async Validator 异步验证使用说明

    async-validator 是一个异步验证的库,需要传入要验证的数据和验证规则 ,下面通过本文给大家介绍Async Validator 异步验证使用说明,需要的的朋友参考下吧
    2017-07-07
  • javascript中的相等操作符(==与===区别)

    javascript中的相等操作符(==与===区别)

    这篇文章主要介绍了javascript中的相等操作符(==与===区别),需要的朋友可以参考下
    2019-12-12
  • JS替换字符串中指定位置的字符(多种方法)

    JS替换字符串中指定位置的字符(多种方法)

    这篇文章主要介绍了js替换字符串中指定位置的字符,本文通过两种方法实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • javascript window.confirm确认 取消对话框实现代码小结

    javascript window.confirm确认 取消对话框实现代码小结

    本文章讲述的三种都是基于了javascript confirm提示确认框的做法了,只是在不同的地方写哦,有需要的同学可参考一下
    2012-10-10
  • JavaScript使用pop方法移除数组最后一个元素用法实例

    JavaScript使用pop方法移除数组最后一个元素用法实例

    这篇文章主要介绍了JavaScript使用pop方法移除数组最后一个元素,实例分析了javascript中pop方法的使用技巧,需要的朋友可以参考下
    2015-04-04
  • 微信小程序裁剪头像插件使用方法详解

    微信小程序裁剪头像插件使用方法详解

    这篇文章主要为大家详细介绍了微信小程序裁剪头像插件的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • JS调用Android、Ios原生控件

    JS调用Android、Ios原生控件

    本文主要介绍了JS调用Android、Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时,提高代码质量,实现两者在网页端代码的统一。下面跟着小编一起来看下吧
    2017-01-01
  • javascript 事件加载与预加载

    javascript 事件加载与预加载

    本文对JavaScript事件加载进行了一些延伸思考。加载多个事件时,使用window.onload可能会导致一些不便,而通过侦听器等方法,则可以解决这些问题。
    2009-12-12
  • js生成随机数方法和实例

    js生成随机数方法和实例

    这篇文章主要介绍了js生成随机数方法和实例,由js生成一切随机数的基础都是Math.random(),有兴趣的可以了解一下。
    2017-01-01
  • 浏览器加载、渲染和解析过程黑箱简析

    浏览器加载、渲染和解析过程黑箱简析

    浏览器加载、渲染和解析过程的黑箱分析,对于渲染,利用 Fiddler 将网速调慢,可以看到 css 下载后会马上渲染到页面,渲染和下载同步进行,需要的朋友可以参考下
    2012-11-11

最新评论