广告
返回顶部
首页 > 资讯 > 精选 >Vue.js怎么实现文件上传压缩优化
  • 772
分享到

Vue.js怎么实现文件上传压缩优化

2023-07-04 16:07:42 772人浏览 薄情痞子
摘要

本篇内容介绍了“vue.js怎么实现文件上传压缩优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Vue js实现文件上传压缩优化处理两种方

本篇内容介绍了“vue.js怎么实现文件上传压缩优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Vue js实现文件上传压缩优化处理

两种方法 :

  • 第1种是借助canvas的封装的文件压缩上传

  • 第2种(扩展方法)使用compressorjs第三方插件实现

下面来详细介绍两种方法:

 借助canvas的封装的文件压缩上传

封装之前,先要对canvas相关的方法有所了解 

<canvas>简单实例如下:

<canvas id="myCanvas" width="200" height="100"></canvas>

注意: 标签通常需要指定一个id属性 (或者其他), width 和 height 属性定义的画布的大小.

使用 style 属性来添加边框:

<canvas id="myCanvas" width="200" height="100"></canvas>

1.新建imgUpload.js

 将base64转换为file文件

const dataURLtoFile = (dataurl, filename) => {     let arr = dataurl.split(',')    let mime = arr[0].match(/:(.*?);/)[1]    let bstr = atob(arr[1])    let n = bstr.length    let u8arr = new Uint8Array(n)    while (n--) {        u8arr[n] = bstr.charCodeAt(n)    }    return new File([u8arr], filename, { type: mime })};

使用canvas的方法实现(拓展)

drawImage() 方法在画布上绘制画布。

在画布上定位图像:

context.drawImage(img,x,y);

在画布上定位图像,并规定图像的宽度和高度:剪切图像,并在画布上定位被剪切的部分:

context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);

canvas的toDataURL()方法是返回一个包含图片展示的 数据URL。可以使用type 参数其类型,默认为 png 格式 

canvas.toDataURL(type, option);

option表示0到1之间的取值,选定图片的质量,默认值是0.92 

const imgZip = (file) => {    let imgZipStatus = new Promise((resolve, reject) => {        let canvas = document.createElement("canvas"); // 创建Canvas对象(画布)        let context = canvas.getContext("2d");        let img = new Image();        img.src = file.content; // 指定图片的DataURL(图片的base64编码数据)        var Orientation = '';        img.onload = () => {            // canvas.width = 400;            // canvas.height = 300;            canvas.width = img.width;            canvas.height = img.height;            context.drawImage(img, 0, 0, canvas.width, canvas.height);                     file.content = canvas.toDataURL(file.file.type, 0.5); // 0.92为默认压缩质量                        let files = dataURLtoFile(file.content, file.file.name);            resolve(files)        }    })    return imgZipStatus;};

导出方法imgZip

export {    imgZip}

2.全局引入封装的方法

main.js

// 引入imgUpload方法import * as imgUpload from "./utils/imgUpload"Vue.prototype.$imgUpload = imgUpload;

3.页面中使用

这里使用了vant ui框架,实现的头像上传,如果用原生的input file方法也是一样的使用方式

<van-uploader :after-read="afterCard" :before-read="beforeRead" accept="image/*" class="arrart"                :max-size="10240 * 1024" @oversize="onOversize" ref="uploadFile">                <!-- <div class="loadingWrap" v-show="personCardloading">                  <van-loading class="colorCom uploadText" color="#fff" size="24px">{{uploadText}}</van-loading>                </div> -->                <van-image class="iconImg" round :src="Personal.iconUrl?$baseImgUrl+Personal.iconUrl:require('../../assets/img/touciang.png')" width="64" height="64" />              </van-uploader>

限制上传数量

通过 max-count 属性可以限制上传文件的数量,上传数量达到限制后,会自动隐藏上传区域。

禁用文件上传

通过 disabled 属性禁用文件上传。

<van-uploader disabled />

 限制上传大小图片

// 限制上传大小图片    onOversize(file) {      console.log(file, "file");      this.$toast("文件大小不能超过 10M");    },

上传之前的图片验证 

    // 上传之前的图片验证    beforeRead(file) {      console.log(file, "file,123");      if (this.$utils.isImage(file.name)) {        return true;      } else {        this.$toast("请上传图片格式");      }    },

afterCard方法,当提交了头像,先进行压缩处理,再去把formData文件流 作为参数调用接口,

获取到后台返回的图片路径,再调用更新头像接口,把获取的数据赋值显示头像的img.

// 头像上传    afterCard(file) {      this.$imgUpload.imgZip(file).then(resData => {        const fORMData = new FormData();        formData.append("file", resData);        // 请求接口上传图片到服务器        uploadImg(formData).then(res => {          console.log(res, "图片上传");          if (res.code == 200) {            console.log(res.data,"res.data")            let params = {              bbsIconUrl: res.data,              userId: this.id            };            compileUserInfo(params)              .then(resImg => {                console.log(resImg, "resImg");                if (resImg.code == 200) {                  this.Personal.iconUrl =res.data;                                    this.$toast("头像修改成功");                } else {                  this.$toast(resImg.msg);                }              })              .catch(error => {});          } else {            this.$toast(res.msg);          }        });      });    },

 如果这里使用原生的input file,可按照如下操作

示例:

<input type="file" id="file" accept="image/*">
import axiOS from 'axios'; document.getElementById('file').addEventListener('change', (e) => {  const file = e.target.files[0];   if (!file) {    return;  }  this.$imgUpload.imgZip(file).then(resData => {        const formData = new FormData();        formData.append("file", resData);         //接口调用        axios.post('/upload', formData).then((res) => {            console.log('Upload success');        });  }) });

 使用compressorjs第三方插件实现

compressorjs 是一个开源的图片处理库,提供了图片压缩、图片旋转等能力

语法:

new Compressor(file[, options])

1.compressorjs安装

npm install compressorjs --save

2.方法封装

ImageCompressor.js

quality:quality || 0.6, //压缩质量,图片压缩比 0-1

import Compressor from 'compressorjs';export default function ImageCompressor(file, backType, quality) {    return new Promise((resolve, reject) => {        new Compressor(file, {quality:quality || 0.6, //压缩质量success(result) {                if (!backType || backType == 'blob') {                    resolve(result)                } else if (backType == 'file') {                    resolve(file)                } else {                    resolve(file)                }// resolve(result);},error(err) {                console.log("图片压缩失败");reject(err);}})    })}

 此插件还能解决ios移动端拍照图片翻转90度问题

3.页面使用

import ImageCompressor from '@/utils/ImageCompressor'

4.头像上传处理

这里记得使用 async await,注意使用的file取值,与第一种的方法有所不同

 // 头像上传    async afterCard(file) {        let newFile = await ImageCompressor(file.file, 'file', 0.6); //图片压缩        const formData = new FormData();        formData.append("file", newFile);        uploadImg(formData).then(res => {          if (res.code == 200) {            this.centerInfo.iconUrl = res.data;            let params = {              iconUrl: res.data,              id: this.id,              loginType: this.loginType            };            updateMineIconUrl(params)              .then(resImg => {                console.log(resImg, "resImg");                if (resImg.code == 200) {                                 this.$toast("头像修改成功");                } else {                  this.$toast(res.msg);                }              })              .catch(error => {});          } else {            this.$toast(res.msg);          }        });        },

如果这里使用原生的input file,可按照如下操作

示例:

<input type="file" id="file" accept="image/*">
import axios from 'axios';import Compressor from 'compressorjs'; document.getElementById('file').addEventListener('change', (e) => {  const file = e.target.files[0];   if (!file) {    return;  }   new Compressor(file, {    quality: 0.6,     success(result) {      const formData = new FormData();       formData.append('file', result, result.name);        //接口调用      axios.post('/upload', formData).then(() => {        console.log('Upload success');      });    },    error(err) {      console.log(err.message);    },  });  });

“Vue.js怎么实现文件上传压缩优化”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Vue.js怎么实现文件上传压缩优化

本文链接: https://www.lsjlt.com/news/346399.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue.js怎么实现文件上传压缩优化
    本篇内容介绍了“Vue.js怎么实现文件上传压缩优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue js实现文件上传压缩优化处理两种方...
    99+
    2023-07-04
  • Java怎么实现文件压缩与上传FTP
    这篇文章主要介绍“Java怎么实现文件压缩与上传FTP”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java怎么实现文件压缩与上传FTP”文章能帮助大家解决问题。Java文件压缩与上传FTP文件压缩...
    99+
    2023-07-02
  • Java如何实现文件压缩与上传FTP
    目录Java文件压缩与上传FTP文件压缩Ftp下载与上传文件Java程序FTP上传文件依赖架包 commons-net-3.4.jarJava文件压缩与上传FTP 文件压缩 1.po...
    99+
    2022-11-13
  • 怎么用java实现压缩文件
    你可以使用Java的ZipOutputStream类来压缩文件。下面是一个简单的例子: import java.io.File; i...
    99+
    2023-10-23
    java
  • 怎么用C#实现压缩文件
    本篇内容主要讲解“怎么用C#实现压缩文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用C#实现压缩文件”吧!一、单文件压缩场景,文件可能比较大,需要压缩传输,比如上传和下载/// ...
    99+
    2023-06-20
  • Shell中怎么上传zip压缩文件到FTP服务器
    本篇文章为大家展示了Shell中怎么上传zip压缩文件到FTP服务器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。代码如下:# /bin/bash# creator:lihuib...
    99+
    2023-06-09
  • Shell脚本实现上传zip压缩文件到FTP服务器
    # /bin/bash # creator:lihuibin # date : 2014-03-10 16:45 # desc : upload file to ftp hosts="192.16...
    99+
    2022-06-04
    压缩文件 脚本 上传
  • vbs中怎么实现压缩文件夹
    今天就跟大家聊聊有关vbs中怎么实现压缩文件夹,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。strComputer = "." Set&nbs...
    99+
    2023-06-08
  • Android中怎么实现图片压缩与上传功能
    Android中怎么实现图片压缩与上传功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先需要对图片进行压缩,这方面可以使用第三方的库,我在实际的开发中使用的...
    99+
    2023-05-30
    android
  • nodejs原生怎么实现压缩文件夹
    随着当今互联网技术和业务的不断发展,文件传输和存储成为了不可或缺的一部分。我们经常需要将一些大小比较大的文件或文件夹压缩成一个压缩包,以便于传输或存储。而开发人员要如何实现文件夹的压缩呢?本文将介绍如何使用Node.js来原生实现文件夹的压...
    99+
    2023-05-14
  • HTML5中怎么实现一个图片压缩上传功能
    这篇文章给大家介绍HTML5中怎么实现一个图片压缩上传功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、创建一个图片和一个canvasXML/HTML Code复制内容到剪贴板va...
    99+
    2022-10-19
  • 怎么使用vue实现微信端图片压缩上传
    这篇文章主要介绍“怎么使用vue实现微信端图片压缩上传”,在日常操作中,相信很多人在怎么使用vue实现微信端图片压缩上传问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用vue实现微信端图片压缩上传”的疑...
    99+
    2023-07-04
  • Linux中shell怎么实现压缩多个文件
    这篇文章主要介绍Linux中shell怎么实现压缩多个文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux环境下写一个脚本从键盘让用户输入几个文件,脚本能够将此几个文件归档压缩成一个文件:首先介绍一下case...
    99+
    2023-06-09
  • java怎么实现1M图片压缩优化到100kb
    这篇“java怎么实现1M图片压缩优化到100kb”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java怎么实现1M图片压缩...
    99+
    2023-07-02
  • PHP实现文件夹压缩、解压及zip文件在服务器之间的传输
    如果有两个项目分布在两台服务器上,并且需要经常的传递文件夹或者文件,那么就需要考虑将文件夹或者大文件压缩后进行传输。 压缩与解压代码如下: public static function zipFolder($sourcePath...
    99+
    2023-09-06
    后端 服务器 Powered by 金山文档
  • Nodejs中怎么实现图片上传和压缩预览功能
    这篇文章给大家介绍Nodejs中怎么实现图片上传和压缩预览功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、引入基本配置const Koa = req...
    99+
    2022-10-19
  • 使用ASP.NET Core怎么实现文件响应压缩
    使用ASP.NET Core怎么实现文件响应压缩?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。误区1:未使用 Brotil 压缩  几乎不需要任何额外的代价,Br...
    99+
    2023-06-15
  • java怎么实现文件上传
    (1)准备好前台页面Upload.html表单 action=上传文件后台接口 method=“post”enctype=“multipart/form-data”文件输入框 (2)加入相应的jar包免费在线视频教程分...
    99+
    2017-05-26
    java 实现 文件上传
  • layui怎么实现文件上传
    这篇文章将为大家详细讲解有关layui怎么实现文件上传,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下<!DOCTYPE html> &l...
    99+
    2022-10-19
  • react怎么实现文件上传
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react怎么实现文件上传?react使用antd实现手动上传文件(提交表单)前言:最近在做一个后台管理项目涉及到上传文件,使用antd里的Upload实...
    99+
    2023-05-14
    React
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作