亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue與compressor.js實(shí)現(xiàn)高效文件壓縮的方法

 更新時(shí)間:2024年03月22日 11:10:01   作者:水星記_  
本文將介紹基于 Vue 框架和 compressor.js 的上傳時(shí)文件壓縮實(shí)現(xiàn)方法,通過在上傳過程中對(duì)文件進(jìn)行壓縮,減小文件大小,提升上傳速度,為用戶創(chuàng)造更快捷、高效的上傳體驗(yàn),感興趣的朋友跟隨小編一起看看吧

前言

上傳文件是一個(gè)常見的需求,并且文件大小往往成為限制因素之一。為了提升用戶體驗(yàn)和節(jié)省帶寬消耗,上傳時(shí)的文件壓縮便顯得格外重要。本文將介紹基于 Vue 框架和 compressor.js 的上傳時(shí)文件壓縮實(shí)現(xiàn)方法,通過在上傳過程中對(duì)文件進(jìn)行壓縮,減小文件大小,提升上傳速度,為用戶創(chuàng)造更快捷、高效的上傳體驗(yàn)。

安裝

npm install image-compressor.js
yarn add image-compressor.js

compressor.js 常用的屬性

屬性描述
quality設(shè)置壓縮圖像的質(zhì)量。值范圍為0到1之間,其中0表示最低質(zhì)量,1表示最高質(zhì)量。
width指定壓縮圖像的目標(biāo)寬度??梢允褂孟袼鼗虬俜直葋肀硎?。
height指定壓縮圖像的目標(biāo)高度??梢允褂孟袼鼗虬俜直葋肀硎尽?/td>
minWidth限制壓縮后的圖像寬度的最小值。如果圖像的寬度小于此值,將不會(huì)進(jìn)行壓縮。
minHeight限制壓縮后的圖像高度的最小值。如果圖像的高度小于此值,將不會(huì)進(jìn)行壓縮。
maxWidth限制壓縮后的圖像寬度的最大值。如果圖像的寬度超過此值,將會(huì)按比例縮小。
maxHeight限制壓縮后的圖像高度的最大值。如果圖像的高度超過此值,將會(huì)按比例縮小。
convertSize確定是否在壓縮時(shí)調(diào)整圖像的大小。如果設(shè)置為true,將根據(jù)目標(biāo)寬度和高度自動(dòng)調(diào)整圖像大小。
checkOrientation檢查圖像的方向信息,并根據(jù)需要進(jìn)行自動(dòng)旋轉(zhuǎn)。

這些是 compressorjs 插件的一些常見屬性,用于控制圖像的壓縮質(zhì)量、尺寸和方向。你可以根據(jù)實(shí)際需求設(shè)置這些屬性以獲得想要的壓縮效果。更多詳細(xì)信息和屬性,請(qǐng)參閱插件的官方文檔。

封裝文件

import ImageCompressor from 'image-compressor.js';
export default function compressFile(file) {
  return new Promise((resolve, reject) => {
    const options = {
      success(result) {
        // 將壓縮后的 Blob 轉(zhuǎn)換為 File 對(duì)象(如果組件支持Blob則不用這一步)
        const compressedFile = new File([result], file.name, {
          type: file.type,
          lastModified: Date.now(),
        });
        resolve(compressedFile);
      },
      error(e) {
        reject(e);
      },
    };
    if (file.size > 5 * 1024 * 1024) {
      options.quality = 0.6; // 壓縮質(zhì)量
      options.convertSize = false;//不進(jìn)行圖像尺寸的調(diào)整
      options.checkOrientation = false; // 圖片翻轉(zhuǎn),默認(rèn)為false
    }
    new ImageCompressor(file, options);
  });
}

main.js

// 全局掛載
import compressFile from '@/utils/compressFile';
Vue.prototype.$compressFile = compressFile;

使用文件

<template>
  <div>
    <van-field label="照片">
      <template #input>
        <van-uploader :after-read="(file, detail) => clzpAfterRead(file, detail, 'xszzp')" v-model="cszp" :max-count="1" accept="image/*" />
      </template>
    </van-field>
  </div>
</template>
<script>
import { uploadFile } from "@/api/publicApi";
export default {
  data() {
    return {
      cszp: "",
    };
  },
  mounted() {},
  methods: {
    async clzpAfterRead(file, detail, name) {
      console.log(file.file.size, "未壓縮大小");
      // 調(diào)用壓縮圖片的方法 this.$compressFile
      const compressedFile = await this.$compressFile(file.file);
      console.log(compressedFile.size, "壓縮后大小");
      let formData = new FormData();
      formData.append("file", compressedFile);
      uploadFile(formData).then((res) => {
        // 執(zhí)行操作
      });
    },
  },
};
</script>

實(shí)現(xiàn)過程

  • 首先,需要在 Vue 組件中引入 ImageCompressor 庫??梢酝ㄟ^ import ImageCompressor from 'image-compressor.js' 來實(shí)現(xiàn);
  • 下面是一個(gè)名為 compressFile 的函數(shù)。該函數(shù)接受一個(gè)文件(file)作為參數(shù),并返回一個(gè) Promise 對(duì)象,用于處理異步操作;
  • 在 compressFile 函數(shù)內(nèi)部,創(chuàng)建了一個(gè) options 對(duì)象,其中包含了成功(success)和錯(cuò)誤(error)的回調(diào)函數(shù);
  • 如果文件的大小超過 5MB,則設(shè)置 options 對(duì)象的 quality 屬性為 0.6,表示壓縮質(zhì)量為 60%;
  • 接下來,創(chuàng)建一個(gè) ImageCompressor 實(shí)例,將文件和 options 對(duì)象作為參數(shù)傳遞給它。這將觸發(fā)圖片壓縮的過程;
  • 當(dāng)壓縮成功時(shí),會(huì)調(diào)用 success 回調(diào)函數(shù)。在回調(diào)函數(shù)中,將壓縮后的 Blob 對(duì)象轉(zhuǎn)換為 File 對(duì)象,并使用 resolve 方法將其作為 Promise 的返回值返回;
  • 當(dāng)壓縮出錯(cuò)時(shí),會(huì)調(diào)用 error 回調(diào)函數(shù)。在回調(diào)函數(shù)中,使用 reject 方法將錯(cuò)誤信息作為 Promise 的返回值返回;
  • 接下來是一個(gè) Vue 組件的模板代碼。在模板中使用了 van-uploader 組件來實(shí)現(xiàn)圖片的上傳功能;
  • 在 methods 屬性中定義了一個(gè)名為 clzpAfterRead 的方法。該方法會(huì)在圖片上傳成功后觸發(fā)。參數(shù) file 表示上傳的文件,detail 表示上傳的詳細(xì)信息,name 表示上傳文件的名稱;
  • 在 clzpAfterRead 方法中,首先打印出上傳文件的原始大小 file.file.size。接下來,調(diào)用 this.$compressFile 方法對(duì)上傳的文件進(jìn)行壓縮;
  • 使用 await 關(guān)鍵字等待壓縮操作完成,并將壓縮后的文件賦值給 compressedFile 變量;
  • 打印出壓縮后文件的大小 compressedFile.size;
  • 創(chuàng)建一個(gè) FormData 對(duì)象 formData,并將壓縮后的文件添加到 formData 中;
  • 調(diào)用 uploadFile 方法,將 formData 作為參數(shù)傳遞給它,并使用 .then 方法處理上傳成功后的響應(yīng);
  • 在 .then 方法中可以執(zhí)行后續(xù)操作,例如更新界面或處理上傳成功的數(shù)據(jù)。

總結(jié)起來,這段代碼的實(shí)現(xiàn)思路是:通過 van-uploader 組件實(shí)現(xiàn)圖片上傳功能,在上傳成功后調(diào)用 clzpAfterRead 方法,將上傳的圖片文件通過 image-compressor.js 庫進(jìn)行壓縮,并將壓縮后的文件再次上傳到服務(wù)器。整個(gè)過程使用了 Vue 框架以及 Promise 對(duì)象來處理異步操作,以實(shí)現(xiàn)圖片上傳時(shí)壓縮大小的功能。

實(shí)現(xiàn)效果

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

相關(guān)文章

  • vue3:setup語法糖使用教程

    vue3:setup語法糖使用教程

    <script setup>是在單文件組件中使用Composition API的編譯時(shí)語法糖,下面這篇文章主要給大家介紹了關(guān)于vue3:setup語法糖使用的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Vue中對(duì)watch的理解(關(guān)鍵是immediate和deep屬性)

    Vue中對(duì)watch的理解(關(guān)鍵是immediate和deep屬性)

    watch偵聽器,是Vue實(shí)例的一個(gè)屬性,是用來響應(yīng)數(shù)據(jù)的變化,需要在數(shù)據(jù)變化時(shí)執(zhí)行異步或開銷較大的操作時(shí),這個(gè)方式是最有用的,這篇文章主要介紹了Vue中對(duì)watch的理解,需要的朋友可以參考下
    2022-11-11
  • vue 使用post/get 下載導(dǎo)出文件操作

    vue 使用post/get 下載導(dǎo)出文件操作

    這篇文章主要介紹了vue 使用post/get 下載導(dǎo)出文件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Vue使用el-dialog關(guān)閉后重置表單方式

    Vue使用el-dialog關(guān)閉后重置表單方式

    這篇文章主要介紹了Vue使用el-dialog關(guān)閉后重置表單方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • vue中使用hover選擇器無效的問題

    vue中使用hover選擇器無效的問題

    這篇文章主要介紹了vue中使用hover選擇器無效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 詳解Vue中公共組件的封裝

    詳解Vue中公共組件的封裝

    在Vue中,組件是構(gòu)建用戶界面的基本單位,封裝公共組件是一種良好的實(shí)踐,可以提高代碼的可復(fù)用性和可維護(hù)性,下面我們就來看看如何封裝一個(gè)公共的按鈕組件吧
    2023-08-08
  • Vue鍵盤事件用法總結(jié)

    Vue鍵盤事件用法總結(jié)

    本篇文章主要介紹了Vue鍵盤事件用法總結(jié),詳細(xì)的介紹了各種鍵盤事件的用法,有興趣的可以了解一下
    2017-04-04
  • Vue echarts模擬后端數(shù)據(jù)流程詳解

    Vue echarts模擬后端數(shù)據(jù)流程詳解

    在平常的項(xiàng)目中,echarts圖表我們也是使用的非常多的,通常我們從后端拿到數(shù)據(jù),需要在圖表上動(dòng)態(tài)的進(jìn)行呈現(xiàn),接下來我們就模擬從后端獲取數(shù)據(jù)然后進(jìn)行呈現(xiàn)的方法
    2022-09-09
  • vue-router 學(xué)習(xí)快速入門

    vue-router 學(xué)習(xí)快速入門

    本篇文章主要介紹了vue-router 學(xué)習(xí)快速入門,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • 淺析Vue3如何實(shí)現(xiàn)頁面訪問攔截

    淺析Vue3如何實(shí)現(xiàn)頁面訪問攔截

    在Vue3中,頁面訪問攔截(Navigation?Guards)是一種常見的路由控制機(jī)制,那么Vue3具體是如何實(shí)現(xiàn)這一功能的呢,下面就跟隨小編一起來學(xué)習(xí)一下吧
    2024-03-03

最新評(píng)論