前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ant design中upload组件 上传图片压缩

ant design中upload组件 上传图片压缩

作者头像
我乃小神神
发布于 2021-12-07 05:51:58
发布于 2021-12-07 05:51:58
1.6K00
代码可运行
举报
文章被收录于专栏:前端基础前端基础
运行总次数:0
代码可运行

不想描述多余的,直接看代码简单直接

const [defaultFileList, setDefaultFileList] = useState([]);

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <Upload
                accept="image/*"
                customRequest={uploadImage}
                onChange={handleOnChange}
                listType="picture-card"
                showUploadList={true}
                fileList={defaultFileList}
                onRemove={removeFileItem}
                beforeUpload={beforeUpload}
                className="image-upload-grid"
              >
                {defaultFileList.length >= 3 ? null : uploadButton}
              </Upload>
  • customRequest 自定义上传图片的
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  const uploadImage = async options => {
    const { onSuccess, onError, file, onProgress, fileList } = options;
    const fmData = new FormData();
    fmData.append('file', file);
    try {
      fetch(`***/api/common/upload_file`, {
        method: 'POST',
        credentials: 'include',
        body: fmData
      })
        .then(response => response.json())
        .catch(error => {
          message.error('error');
        })
        .then(response => {
          onSuccess('Ok');
          if (response.code === 0) {
            let list = {
              uid: file.uid,
              data: response.data
            };
            //setDefaultFileList 这个这个一定需要
            setDefaultFileList([
              ...defaultFileList,
              { ...file, url: `https:www.***.com/api/file/download/${response.data}`, uid: response.data }
            ]);
            setState({
              imgList: [...imgList, list]
            });
            setState({
              imgfileId: [...imgfileId, response.data]
            });
          } else {
            message.error(response.msg);
          }

          console.log('Success:', response);
        });
    } catch (err) {
      console.log('Eroor: ', err);
      const error = new Error('Some error');
      onError({ err });
    }
  };
  • beforeUpload 压缩图片在这一步操作
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const beforeUpload = (file, fileList) => {
    return new Promise(resolve => {
      // 图片压缩
      let reader = new FileReader(),
        img = new Image();
      reader.readAsDataURL(file);
      reader.onload = function(e) {
        img.src = e.target.result;
      };

      img.onload = function() {
        let canvas = document.createElement('canvas');
        let context = canvas.getContext('2d');

        let originWidth = this.width;
        let originHeight = this.height;

        canvas.width = originWidth;
        canvas.height = originHeight;

        context.clearRect(0, 0, originWidth, originHeight);
        context.drawImage(img, 0, 0, originWidth, originHeight);

        canvas.toBlob(
          blob => {
            let imgFile = new File([blob], file.name, { type: file.type }); // 将blob对象转化为图片文件
            resolve(imgFile);
          },
          file.type,
          0.2
        ); // file压缩的图片类型
      };
    });
  };
  • onChange 一定需要
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  const handleOnChange = ({ file, fileList, event }) => {
    let a = {
      uid: '1',
      name: file.name,
      status: 'uploading',
      url: ''
    };
    setDefaultFileList([a]);
  };
  • onRemove 也需要
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  const removeFileItem = (file, fileList) => {
    console.log('file', file, fileList);
    console.log(defaultFileList);

    const matchKey = file.uid !== undefined ? 'uid' : 'name';
    const removed = defaultFileList.filter(item => item.uid !== file[matchKey]);
    if (removed.length === defaultFileList.length) {
      return null;
    }
    setDefaultFileList(removed);
    return removed;
  };
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/09/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
react-开发经验分享-Upload上传功能的具体项目实现
这是因为Promise是没有abort 方法的,只有原生js的XMLHttpRequest对象才具有abort
Mr. 柳上原
2019/05/17
1.9K0
el-upload组件使用
ref="upload":给这个元素一个引用名,方便在Vue实例中通过this.$refs.upload访问。
用户4396583
2024/09/05
1680
el-upload 上传Demo
<el-upload class="upload-demo" ref="upload" :on-change="handleUploadChange" :on-success="handleImportSuccess" :before-upload="beforeImportUpload" :http-request="uploadZip" :file-list="fileList" :on-remove="handleUploadRemove
李维亮
2021/07/08
1.3K0
开箱即用的前端图片压缩方案
我们都知道在“寸土寸金”的互联网时代, 速度是第一竞争力, 虽然我们的5G发展已经摇摇领先, 但是也经不住用户在一个网页里传很多“巨无霸”图片, 最终导致的结果就是页面“龟速”打开......
徐小夕
2022/09/27
1.3K0
开箱即用的前端图片压缩方案
使用canvas在前端压缩图片实例页面
HTML代码: <input id="file" type="file"> JS代码: var eleFile = document.querySelector('#file'); // 压缩图片需要的一些元素和对象 var reader = new FileReader(), img = new Image(); // 选择的文件对象 var file = null; // 缩放图片需要的canvas var canvas = document.createElement('canvas'); va
李维亮
2021/07/08
4370
前端图片压缩方案及代码实现
随着互联网的发展,图片在各种网站和应用中铺天盖地,运营人员在后台管理系统中上传图片时常常忽略的图片的体积大小,随之产生的带宽和服务器容量也大大增加,图片压缩的需求随之产生。
越陌度阡
2023/02/13
1.4K0
前端图片压缩方案及代码实现
使用ElementUI el-upload一次性上传多个文件
在日常的前端开发中,文件上传是一个非常常见的需求,尤其是在用户需要一次性上传多个文件的场景下。ElementUI作为一款非常优秀的Vue.js 2.0组件库,为我们提供了丰富的UI组件,极大地提升了开发效率。其中,el-upload组件便是一个功能强大且易于使用的文件上传组件。
繁依Fanyi
2024/07/02
3.8K0
Vue 图片压缩并上传至服务器
本文主要讲解基于 Vue + Vant ,实现移动端图片选择,并用 Canvas 压缩图片,最后上传至服务器。还会封装一个工具类,方便直接调用。
solocoder
2022/04/06
2.4K0
Vue 图片压缩并上传至服务器
antd 实现批量上传
antd 中的 upload 组件功能强大,支持文件夹、拖拽、自动上传、ui 美观,文档完善,通过简单配置即可开发完功能,以功能为主的开发,建议使用组件完成
程序员王天
2023/10/18
1K0
Vue中图片压缩的工具
图片压缩的工具 : image-conversion 1.安装模块: npm i image-conversion --save 2.调用 import * as imageConversion from 'image-conversion'; 例子:以0.9的质量压缩图像 function view(){ const file = document.getElementById('demo').files[0]; console.log(file); imageConversion
Reset
2022/12/27
7850
Ant Design实现Excel导入导出
最近公司的公众号管理系统需要添加Excel导入与导出功能,考虑到需要多个地方引用,所以开发了一个组件,下面把代码分享出来给大家。
越陌度阡
2022/05/06
1.4K0
element ui 图片上传封装多张或单张
最近写了一个后台管理项目,发现每个后台项目都离不开上传图片,决定把上传图片做个封装,话不多说直接上代码!
前端小白@阿强
2020/08/11
2.4K0
微信浏览器点击文件上传提示没有应用可执行此操作的解决方法
一个 Vue 项目,使用的 AntDesign for Vue 的前端框架。图片上传使用的 Upload 组件,在微信访问 H5 页面,点击图片上传时提示“没有应用可执行此操作”。如下图所示:
德顺
2020/04/13
5.9K0
vue开发:对Element上传功能的二次封装
最近公司老项目改用vue开发,前端框架采用element ui,这个框架风格还是很漂亮的,只是上传功能有一些问题,比如:limit=1限制上传数量后,后面的添加按钮没有隐藏,再用就是如果上传图片组,很多需求需要对图片组进行排序修改,基于这两个需求,对element的el-upload组件进行了二次封装。
用户4831957
2019/08/13
2.1K0
Element-UI Upload 手动上传文件的实现与优化
在Web开发中,文件上传是一个常见的需求。Element-UI作为一套优秀的Vue组件库,提供了丰富的上传组件,其中<el-upload>就是用于文件上传的组件。本文将重点介绍如何使用Element-UI的Upload组件进行手动文件上传,以及在实际应用中的一些优化策略。
IT_陈寒
2023/12/14
5.8K0
Element-UI Upload 手动上传文件的实现与优化
大数据量文件导入实时更新进度条实现
物联网设备采集到的实时数据以csv格式文件存储,需要定时导入到mongoDB数据库,数据文件大概20多M(天),10万左右数据量。
程序你好
2022/11/18
1.4K0
大数据量文件导入实时更新进度条实现
Ant Design Upload 组件封装
<template> <j-modal width="80%" :onclick="clickrow" :title="title" :maskClosable="false" switchFullscreen :visible.sync="editModalVisible" @cancel="handleCancleDbSync" > <template slot="footer"> <a-button @click=
lyudev
2022/08/04
4690
Ant Design Upload 组件封装
antdesign + koa 实现图片上传
我们今天实现一下图片上传,前端用到的是antdesign中的文件上传,后端是自己封装的node的koa框架。
用户4793865
2023/01/12
9070
移动拍照上传图片实现图片压缩
手机拍照一般手机需要5m大小的内存上传过程需要流量大,上传时间长的问题,为更好的用户体验需要对图片进行压缩。
用户6379025
2022/12/26
1.8K0
React 实现一个markdown[2]
theme: channing-cyan highlight: a11y-light
用户4793865
2023/02/03
1.2K0
相关推荐
react-开发经验分享-Upload上传功能的具体项目实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验