Vue 项目使用 jszip 和 file-saver 批量打包压缩图片或附件

这篇具有很好参考价值的文章主要介绍了Vue 项目使用 jszip 和 file-saver 批量打包压缩图片或附件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求与挑战总是并存的,比如今天,又是掉头发的一天!!!

背景:图片上传功能用户会批量上传好多个,并且图片可能还会很大,于是就采用了前端先压缩,然后将压缩包直接传给后端。

1、安装插件:

npm install jszip

npm install file-saver

2、在页面中引入插件:

import JSZip from 'jszip';
import FileSaver from 'file-saver'; 
// 定义全局的 zip
const zip = new JSZip();

注释:在引入组件的位置定义一个全局的 zip 用于文件的压缩

3、element UI 上传组件:

<el-upload
    class="upload-demo"
    accept=".jpg,.JPG,.png,.PNG"
    action="#"
    :multiple="true"
    :auto-upload="false"
    :on-change="handleChange1"
    :show-file-list="false"
    :file-list="fileList1">
    <el-button size="small" type="primary">选择文件</el-button>
</el-upload>
<el-button class="handle-upload" size="small" type="primary" @click="uploadData()" :loading="loadingFile1">开始上传</el-button>

4、初始化 data 数据:

export default {
    data() {
        return {
            fileList1: [], // 待上传图片数据
        }
    }
}

5、添加图片选择的 onchange 方法:

export default {
    methods: {
        // 上传图片
        handleChange1(file, fileList) {
            const that = this;
            const _file = file.raw;
            let blob = new Blob([_file], { type: _file.type});
            zip.file(_file.name, blob);
            this.fileList1 = fileList;
        },
        // 开始上传
        uploadData(){
            // 生成 ZIP 文件
            zip.generateAsync({ type: 'blob' })
            .then(function (zipBlob) {
                // 在这里可以进行上传操作,将 zipBlob 发送到服务器
                // 也可以通过 FileSaver.js 将 ZIP 文件保存到本地
                FileSaver.saveAs(zipBlob, '压缩包名称.zip');
             })
             .catch(function (error) {
                console.error('压缩视频失败:', error);
             });
        }
    }
}

注释:zip. 属性是在第二步中进行定义的,具体请参考第二步

至此前端附件压缩完成!!!

附加:从服务器获取附件,进行压缩下载

1、安装插件:

npm install jszip

2、在页面中引入插件:

import JSZip from 'jszip';

3、第3 、4步同上

5、添加图片选择的 onchange 方法:

export default {
    methods: {
        // 图片压缩前转换
        imgToBuffer(url) {
           return new Promise((resolve, reject) => {
             const xml = new XMLHttpRequest();
             xml.open('GET', url, true);
             xml.responseType = 'blob';
             xml.onload = function ({ currentTarget }) { //从事件对象结构出currentTarget
               const { status, response } = currentTarget;
               status === 200 ? resolve(response) : reject(status); // response就是转化后的
             };
             xml.send();
           });
        },
        // 开始压缩
        uploadData(){
            const zip = new JSZip();
            const imgCache = {};
            const imgArr = [];
            let list = [
                    {name: '测试图片1', url: 'https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF'},
                    {name: '测试图片2', url: 'https://t7.baidu.com/it/u=727460147,2222092211&fm=193&f=GIF'},
                    {name: '测试图片3', url: 'https://t7.baidu.com/it/u=3911840071,2534614245&fm=193&f=GIF'},
                    {name: '测试图片4', url: 'https://t7.baidu.com/it/u=938052523,709452322&fm=193&f=GIF'},
             ];
             list.forEach((item) => { // urlList格式:[{url:图片链接,name:图片名称}...]
                // 逐个添加文件
                const promise = this.imgToBuffer(item.url).then((res) => { 
                    zip.file(`${item.name}.${res.type.split('/').pop()}`, res, { binary: true }); 
                    imgCache[item.name] = res; // 下载文件, 并存成ArrayBuffer对象(blob)
                });
                imgArr.push(promise);
            });
            Promise.all(imgArr).then(() => {
                zip.generateAsync({ type: 'blob' }).then((content) => {
                    saveAs(content, '压缩包名称'); // 打包压缩
                    this.$message.success('压缩完成');
                }).catch((err) => {
                    this.$message.error(err.message);
                });
            });
        }
    }
}

至此完成压缩下载!!!

以上测试有效,感谢支持!!!文章来源地址https://www.toymoban.com/news/detail-508448.html

到了这里,关于Vue 项目使用 jszip 和 file-saver 批量打包压缩图片或附件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • angular框架表格自定义导出,ui组件库为【devExpress by devExtreme】导出插件为exceljs、file-saver

    使用的ui组件库为devExtreme 注意:如果你没有使用这个组件库,那 后续的代码可能对你不适用!!! ,因为devExtreme和exceljs是结合着来的 其地址如下: devexpress https://js.devexpress.com/ 导出使用的是ExcelJS 其地址如下: exceljs https://github.com/exceljs/exceljs/blob/master/README_zh.md 安装exce

    2024年02月09日
    浏览(60)
  • VIte+Vue3 打包在FIle本地index.html打开项目(不需要起服务)

    参考原文链接:https://www.jianshu.com/p/41dc11b94c92,增加了一些问题处理。 一、安装插件 二、配置 vite.config.js 三、路由配置(可选) 如果你配置了路由, history 选 createWebHashHistory() 即可。 四、修改打包后的 index.html 配置完前三个以后,就可以进行打包了。 下面的那两个报错,

    2023年04月22日
    浏览(52)
  • vue-cli脚手架创建创建的项目打包后无法正常打开报 Failed to load resource: net::ERR_FILE_NOT_FOUND错误

    亲爱的小伙伴们,你们最近是否有遇到用使用最新的脚手架打包项目后index.html文件无法正常打开,然后控制台报错的情况呢,不要担心,这个坑今天被我踩到了并且被我解决了,下边就让我来给大家分享一下经验吧! 1.找到vue.config.js文件,进行如下配置 即添加一行配置:

    2024年02月15日
    浏览(56)
  • vue将某个组件打包成js,在其他项目使用

    1、首先创建一个组件的文件,里面包括了组件页面和index.js,index.js的作用是把组件暴露出去,目录结构: 2、index.js里面的内容 3、配置package.json打包命令,可以通过 --mode 后面参数指定打包环境 注意:目前vue.config.js里面是没有任何配置的,到这里其实就可以了,运行打包命

    2024年02月16日
    浏览(62)
  • vue项目打包优化:缩小体积productionSourceMap设置,使用cdn加速

    一、vue项目打包体积大优化之productionSourceMap设置 1、productionSourceMap 的作用 productionSourceMap 在构建时生成完整的 SourceMap 文件,默认情况下开启。生产环境中启用 productionSourceMap 有助于开发者调试代码,可以在浏览器的调试工具中查看到源文件中错误的代码位置,而不是编译后

    2024年02月21日
    浏览(45)
  • vite+vue3+ts搭建项目八(打包性能优化三:使用CDN)

    使用vite-plugin-cdn-import 下载npm包 官方github:https://github.com/MMF-FE/vite-plugin-cdn-import 开发环境使用本地的npm包,cdn是打包时候才生效 在vite.config.ts中通过importToCDN引入 注意事项 :网上很多教程,还需要在 build 的 rollupOptions 添加对应的 external ,如上注释所示,其实是不需要的,

    2024年02月02日
    浏览(103)
  • vue3利用 a 标签,文件流,JSZip 压缩包,实现文件下载

    在实现文件的下载,采用 a 标签,会出现图片,没有进行下载,而是,在当前页面打开了图片。 导致原因: ·a标签,有 download 属性,可以实现下载 同源文件( ip 和 端口 相同),当图片不同源 时,点击下载,会在当前窗口直接打开图片,而不是进入下载状态。 1.1 没有图片

    2023年04月08日
    浏览(44)
  • 基于Jquery EasyUI JSZip FileSaver的简单使用

    在前端的项目开发中 ,下载文件压缩包是很重要的一个环节,那么怎么下载多个文件并压缩成ZIP下载呢? 库下载地址:https://download.csdn.net/download/u012949335/88088658   

    2024年02月15日
    浏览(33)
  • [vue3打包时出现的问题]File ‘xxx‘ is a JavaScript file. Did you mean to enable the ‘allowJs‘ option?

     今天在打包vue3+ts的项目是遇到了一个错误信息:is a JavaScript file. Did you mean to enable the \\\'allowJs\\\' option? (是一个javaScript文件。你是否要启用‘allowJs选项?’)错误信息如下: 查了一下说是由于我们的项目配置中缺少了‘allowJs’选项导致的。当我们在使用TypeScript编辑器编译项

    2024年03月23日
    浏览(45)
  • 【Python】使用 requirements.txt 和 pip 打包批量安装

    当我们程序越来越复杂,使用pip管理Python包(库)。我们可以方便的使用配置文件 requirements.txt 批量安装指定版本的指定包。 关于涉及到的pip官方的手册在这个位置: pip documentationv23.1.dev0 本文对以下内容进行说明: pip 的批量安装选项: -r requirements.txt 配置文件 requirements

    2024年02月16日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包