当前位置:首页 > VUE

vue实现压缩上传文件

2026-01-12 01:46:12VUE

压缩上传文件的实现方法

在Vue中实现文件压缩并上传可以通过以下步骤完成:

安装依赖 需要安装compressorjs库处理文件压缩:

npm install compressorjs

组件代码示例

vue实现压缩上传文件

<template>
  <div>
    <input type="file" @change="handleFileChange" />
    <button @click="uploadFile">上传</button>
  </div>
</template>

<script>
import Compressor from 'compressorjs';

export default {
  data() {
    return {
      compressedFile: null
    }
  },
  methods: {
    handleFileChange(event) {
      const file = event.target.files[0];
      if (!file) return;

      new Compressor(file, {
        quality: 0.6,
        success(result) {
          this.compressedFile = result;
        }.bind(this),
        error(err) {
          console.error(err.message);
        }
      });
    },
    async uploadFile() {
      if (!this.compressedFile) return;

      const formData = new FormData();
      formData.append('file', this.compressedFile);

      try {
        const response = await axios.post('/upload', formData, {
          headers: {
            'Content-Type': 'multipart/form-data'
          }
        });
        console.log('上传成功', response.data);
      } catch (error) {
        console.error('上传失败', error);
      }
    }
  }
}
</script>

关键配置参数说明

压缩选项

  • quality: 压缩质量(0-1)
  • maxWidth/maxHeight: 最大宽高(像素)
  • convertSize: 超过指定大小(字节)才压缩
  • mimeType: 输出文件类型

上传处理 使用FormData对象包装压缩后的文件,通过axios发送POST请求。注意设置正确的Content-Type头部。

vue实现压缩上传文件

进阶优化方案

进度显示

axios.post('/upload', formData, {
  onUploadProgress: progressEvent => {
    const percent = Math.round(
      (progressEvent.loaded * 100) / progressEvent.total
    );
    console.log(`上传进度: ${percent}%`);
  }
})

多文件处理

new Compressor(file, {
  quality: 0.6,
  multiple: true,
  success(results) {
    // results是数组
  }
})

错误处理增强

error(err) {
  this.$notify.error({
    title: '压缩失败',
    message: err.message || '未知错误'
  });
}

注意事项

  • 大文件压缩可能导致内存问题,建议限制文件大小
  • 移动端需要考虑性能影响
  • 服务端需要配置接收multipart/form-data
  • 测试不同质量参数对文件大小和清晰度的影响

实现时应根据实际需求调整压缩参数,平衡文件大小和质量的取舍。

标签: 上传文件vue
分享给朋友:

相关文章

vue实现文档分享

vue实现文档分享

Vue 实现文档分享功能 文档分享功能通常涉及文件上传、存储、生成分享链接以及权限控制等模块。以下是基于 Vue 的实现方案: 文件上传组件 使用 element-ui 或 ant-design-…

vue实现滚动中断

vue实现滚动中断

Vue 实现滚动中断的方法 在 Vue 中实现滚动中断通常涉及监听滚动事件,并在特定条件下阻止默认行为或停止滚动。以下是几种常见方法: 监听滚动事件并阻止默认行为 通过 @scroll 或 @wh…

vue点击实现排序

vue点击实现排序

实现点击排序的方法 在Vue中实现点击排序功能,可以通过以下几种方式完成: 使用计算属性结合排序方法 定义一个响应式数据存储排序状态,通过计算属性动态返回排序后的数组。点击事件切换排序状态。…

vue实现横向导航

vue实现横向导航

vue实现横向导航的方法 使用Flex布局实现横向导航 在Vue中可以通过Flex布局快速实现横向导航。创建一个组件,使用display: flex和flex-direction: row属性使导航项…

vue实现查询替换

vue实现查询替换

Vue 实现查询替换功能 在 Vue 中实现查询替换功能,可以通过数据绑定和字符串操作方法结合实现。以下是具体实现方式: 基础实现 <template> <div>…

在线脑图 vue 实现

在线脑图 vue 实现

在线脑图 Vue 实现方案 使用开源库实现 推荐使用 mind-elixir 或 jsmind 这类开源库,它们专为脑图设计且支持 Vue 集成。 安装依赖: npm install mind…