vue2文件流下载成功后文件格式错误、打不开及内容缺失的解决方法

 更新时间:2023年04月27日 10:37:11   作者:Salt_NaCl  
使用Vue时我们前端如何处理后端返回的文件流,下面这篇文章主要给大家介绍了关于vue2文件流下载成功后文件格式错误、打不开及内容缺失的解决方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

项目场景

后端采用文件流的方式将文件信息发送给前端,前端需要接收相应的流信息做出对应的操作,如接收到图片、pdf将进行预览模式,将接收到压缩包形式的则进行文件下载。后端对相应的文件进行不同的传输方式进行传输,前端则需要接收相应的信息并进行操作。

问题描述

当收到图片、pdf则可以正常的进行操作,当接收到压缩包文件流时候可以正常下载,但是下载后,下载的文件损坏了。

原因分析

由于文件不同,所以接收方式也是有区别的,普通的图片、pdf可以采用日常的请求方式去请求,而压缩包的请求需要加上接收数据格式responseType:为blob,默认的responseType为""。

解决方案

1、图片的解决方式

export const getFileImg = row => {
    return request({
        url: '/api/blade-resource/oss/endpoint/get-file-secret',	//请求路径
        method: 'get',	//请求模式
        params: row,	//请求参数
    })
}

2、文件流的解决方式

export const getFileZip = row => {
    return request({
        url: '/api/blade-resource/oss/endpoint/get-file-secret',	//请求路径
        method: 'get',	//请求模式
        params: row,	//请求参数
        responseType: 'blob',
    })
}

3、文件下载

/**
 * 下载压缩包文件
 * @param {blob} fileArrayBuffer 文件流
 * @param {String} filename 文件名称
 * @param {String} fileType 文件格式
 */
export const downloadZip = (fileArrayBuffer, filename, fileType) => {
  let data = new Blob([fileArrayBuffer], { type: fileType == 'zip' ? 'application/zip,charset=utf-8' : 'application/x-rar-compressed,charset=utf-8' });
  if (typeof window.chrome !== 'undefined') {
    // Chrome
    var link = document.createElement('a');
    link.href = window.URL.createObjectURL(data);
    link.download = filename;
    link.click();
    console.log(data);
  } else if (typeof window.navigator.msSaveBlob !== 'undefined') {
    // IE
    var blob = new Blob([data], { type: fileType == 'zip' ? 'application/zip' : 'application/x-rar-compressed' });
    window.navigator.msSaveBlob(blob, filename);
  } else {
    // Firefox
    var file = new File([data], filename, { type: fileType == 'zip' ? 'application/zip' : 'application/x-rar-compressed' });
    window.open(URL.createObjectURL(file));
  }
}

4、Blob下载时的文件格式

文件格式type类型
aacaudio/aac
.abwapplication/x-abiword
.avivideo/x-msvideo
.azwapplication/vnd.amazon.ebook
.binapplication/octet-stream
.bmpimage/bmp
.bzapplication/x-bzip
.bz2application/x-bzip2
.cshapplication/x-csh
.csstext/css
.csvtext/csv
.docapplication/msword
.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
.eotapplication/vnd.ms-fontobject
.epubapplication/epub+zip
.gifimage/gif
.htm/.htmltext/html
.icoimage/vnd.microsoft.icon
.icstext/calendar
.jarapplication/java-archive
.jpeg/.jpgimage/jpeg
.jstext/javascript
.jsonapplication/json
.jsonldapplication/ld+json
.mid/.midiaudio/midi audio/x-midi
.mjstext/javascript
.mp3audio/mpeg
.mpegvideo/mpeg
.mpkgapplication/vnd.apple.installer+xml
.odpapplication/vnd.oasis.opendocument.presentation
.odsapplication/vnd.oasis.opendocument.spreadsheet
.odtapplication/vnd.oasis.opendocument.text
.ogaaudio/ogg
.ogvvideo/ogg
.ogxapplication/ogg
.otffont/otf
.pngimage/png
.pdfapplication/pdf
.pptapplication/vnd.ms-powerpoint
.pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation
.rarapplication/x-rar-compressed
.rtfapplication/rtf
.svgimage/svg+xml
.swfapplication/x-shockwave-flash
.tarapplication/x-tar
.tif/.tiffimage/tiff
.ttffont/ttf
.txttext/plain
.vsdapplication/vnd.visio
.wavaudio/wav
.webaaudio/webm
.webmvideo/webm
.webpimage/webp
.wofffont/woff
.woff2font/woff2
.xhtmlapplication/xhtml+xml
.xlsapplication/vnd.ms-excel
.xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xmlapplication/xml 代码对普通用户来说不可读 (RFC 3023, section 3)text/xml 代码对普通用户来说可读 (RFC 3023, section 3)
.xulapplication/vnd.mozilla.xul+xml
.zipapplication/zip
.3gpvideo/3gpp audio/3gpp(若不含视频)
.3g2video/3gpp2 audio/3gpp2(若不含视频)
.7zapplication/x-7z-compressed

总结

到此这篇关于vue2文件流下载成功后文件格式错误、打不开及内容缺失解决的文章就介绍到这了,更多相关vue2文件流下载后文件格式错误内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • element中el-cascader级联选择器只有最后一级可以多选

    element中el-cascader级联选择器只有最后一级可以多选

    本文主要介绍了element中el-cascader级联选择器只有最后一级可以多选,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • 详解vue3中虚拟列表组件的实现

    详解vue3中虚拟列表组件的实现

    这篇文章主要为大家详细介绍了vue3中实现虚拟列表组件的相关知识,包含加载更多以及loading状态,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-10-10
  • vue3+vite2+mqtt连接遇到的坑及解决

    vue3+vite2+mqtt连接遇到的坑及解决

    这篇文章主要介绍了vue3+vite2+mqtt连接遇到的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • vue 强制组件重新渲染(重置)的两种方案

    vue 强制组件重新渲染(重置)的两种方案

    今天小编就为大家分享一篇vue 强制组件重新渲染(重置)的两种方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • vue-cli之router基本使用方法详解

    vue-cli之router基本使用方法详解

    这篇文章主要为大家详细介绍了vue-cli之router基本使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Vue+OpenLayer实现测距功能

    Vue+OpenLayer实现测距功能

    OpenLayers 是一个专为Web GIS 客户端开发提供的JavaScript 类库包,用于实现标准格式发布的地图数据访问。本文将通过Vue和OpenLayer实现测距功能 ,需要的可以参考一下
    2022-04-04
  • Vue.js实现模拟微信朋友圈开发demo

    Vue.js实现模拟微信朋友圈开发demo

    本篇文章主要介绍了Vue.js实现模拟微信朋友圈开发demo,实现展示朋友圈,评论,点赞等功能,有兴趣的可以了解一下。
    2017-04-04
  • vue.js基于v-for实现批量渲染 Json数组对象列表数据示例

    vue.js基于v-for实现批量渲染 Json数组对象列表数据示例

    这篇文章主要介绍了vue.js基于v-for实现批量渲染 Json数组对象列表数据,结合实例形式分析了vue.js使用v-for遍历json格式数据渲染列表相关操作技巧,需要的朋友可以参考下
    2019-08-08
  • vue+element下拉列表默认值问题

    vue+element下拉列表默认值问题

    这篇文章主要介绍了vue+element下拉列表默认值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • vue组件详解之使用slot分发内容

    vue组件详解之使用slot分发内容

    这篇文章主要介绍了vue组件详解之使用slot分发内容及Vue组件中slot的用法,需要的朋友可以参考下
    2018-04-04

最新评论