ant design pro上传图片到后端

2023-10-27

我们这里是前端将图片上传到后端,然后后端这里再上传到阿里云的OSS,并返回一个文件的路径给前端

先看效果

image.png上传后生成的图片image.png

前端:

// pageList.js
const props = {
    name: "avatar",
    listType: "picture-card",
    className: "avatar-uploader",
    showUploadList: false,
    // 设置只上传一张图片,根据实际情况修改
    customRequest: info => {
      // 手动上传
      const formData = new FormData();
      formData.append('file', info.file);
      uploadLogoImg(formData);
    },
    onRemove: file => {
      // 删除图片调用
      this.setState(state => {
        const index = state.fileList.indexOf(file);
        const newFileList = state.fileList.slice();
        newFileList.splice(index, 1);
        return {
          fileList: newFileList,
        };
      });
    },

    beforeUpload: file => {
      // 控制上传图片格式
      const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';

      if (!isJpgOrPng) {
        message.error('您只能上传JPG/PNG 文件!');
        return;
      }
      const isLt2M = file.size / 1024 / 1024 < 2;
      if (!isLt2M) {
        message.error('图片大小必须小于2MB!');
        return;
      }
    },
  }

...

<Upload
	{...props}
>
  {logoUrl ? <img src={logoUrl} alt="avatar" style={{ width: '100%' }} /> : uploadButton}
</Upload>

// model.js
// 上传图片logo
*uploadLogoImg({ payload }, { call, put }) {
  const response = yield call(uploadLogoImg, payload);
  yield put({
    type: 'handleUploadLogoImg',
    payload: {
      response
    },
  });
},

// api.js
export async function uploadLogoImg(params) {
  // console.log('cityApi.pageList 发送的参数');
  // console.log(JSON.stringify(params));
  return request(`${path}/uploadImage`, {
    method: 'POST',
    body: params,
  });
}

后端:

/**
 * 图片上传
 */
@PostMapping(value = "uploadImage")
public Response<String> uploadImage(LogoPicReq logoPicReq) {
  return success(appservice.uploadLogo(logoPicReq.getFile()));
}

注意:

这里的 LogoPicReq 没有@RequestBody,因为这里是通过表单提交的

@Data
public class LogoPicReq {

    private MultipartFile file;
}

OSS的代码

			if (appFile == null) {
            throw new BusinessException("数据为空");
        }
        String endpoint = ossProperties.getEndpoint();
        String accessKeyId = ossProperties.getAccessKeyId();
        String accessKeySecret = ossProperties.getAccessKeySecret();
        String bucketName = ossProperties.getBucketName();

        InputStream fileContent;
        try {
            fileContent = appFile.getInputStream();
            //获取图片名称
            String filename = appFile.getOriginalFilename();
            if (null == filename || "".equals(filename)) {
                throw new BusinessException("文件为空");
            }

            //获取图片扩展名
            String ext = filename.substring(filename.lastIndexOf(".") + 1);
            //生成图片的存放在服务器的路径
            String picName = "img/walle/" + UUID.randomUUID().toString() + "." + ext;

            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            ossClient.putObject(bucketName, picName, fileContent);
            ossClient.shutdown();

            //获取OSS生成的url
            Date date = new Date();
            date.setTime(date.getTime() + 100L * 365 * 24 * 3600 * 1000);
            GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, picName, HttpMethod.GET);
            request.setExpiration(date);
            URL signedUrl = ossClient.generatePresignedUrl(request);
            log.info("[生成OSS直链]对象名:{},直链地址:{}", picName, signedUrl.toString());
            return signedUrl.toString();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;

其中一定要通过直联的方式进行获取,否则就是上报没有权限

参考:

https://blog.csdn.net/qq_38209894/article/details/99729502

参考2

https://qdhaiqiang.github.io/2019/03/14/Ant%20Design%20Pro%E5%AD%A6%E4%B9%A0%E4%B9%8B%E4%BD%BF%E7%94%A8upload%E7%BB%84%E4%BB%B6%E5%B9%B6%E7%94%A8form%E8%A1%A8%E5%8D%95%E6%8F%90%E4%BA%A4/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ant design pro上传图片到后端 的相关文章

随机推荐

  • 【论文解读-未完成】-A Survey of Transformers-【一篇论文了解整个Transformers王国】

    论文链接 https arxiv org abs 2106 04554 论文时间 202106 论文单位 复旦大学 论文长度 40页 论文目录 A Survey of Transformers Transformers的文献综述 1 INT
  • 自动化测试框架总结

    自动化测试框架流程图 自动化测试框架模块 配置文件读取模块 日志模块 测试数据读取模块 测试执行模块 测试结果更新模块 异常处理模块 屏幕截图模块 自动化框架模块功能说明 配置文件读取模块 模块的主要功能是把测试项目的公共配置读取到脚本里
  • 智能家居_串口通信编程

    模拟串口 我要使用串口开发 那么 安卓系统必须要Root 让我有超级权限 串口就是文件 首先要打开串口文件 我们没有实体开发主板 使用虚拟串口驱动来代替实体开发主板 模拟android主板上的2个串口 模拟 开发板 插入了电脑 电脑就会显示
  • 2020东南大学网络空间安全保研夏令营(预推免)经验

    2020东南大学网安院保研夏令营 预推免 经验 前言 个人情况 本科某双非双一流CS专业 GPA 1 230 国家级省级奖项各有四五项 校级奖项若干 奖学金若干 项目只有一个大创 无论文 东大网安院说来话长 本来是不想报的 然鹅计算机学院的
  • mavne install 报错org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.Invoca...

    maven install 报错 org apache maven surefire util SurefireReflectionException java lang reflect InvocationTargetException
  • java校验文件路径正则表达式_正则表达式判断是否是合法路径

    在页面前端使用一个文本框 输入条件是 c test 在java中File判断是可以通过的 可以创建的 File file new File filePath if file exists file mkdir 说明是一个合法的路径 但是在w
  • 哈师大计算机学院宿舍,新生攻略

    原标题 新生攻略 哈师大所有的 秘密 都在这了 你好 我是哈师大17级的新生 我想全面的了解一下咱们学校 应该去哪了解呀 这你可算是问对人了 听说最近哈尔滨师范大学学生会的官方微信平台出了非常全的新生攻略呢 快关注它们的公众号 hsdxsh
  • Linux系列

    测试代码如下 是一个输出 Tinywan字符串与循环轮数的死循环程序 每输出一行就休眠1秒 原始输出 前台执行该程序运行效果 程序每隔一秒会在终端输出一个字符串 此时如果键入 Ctrl C 程序会收到一个 SIGINT信号 如果不做特殊处理
  • APT 攻击溯源方法

    概述 当今世界正值百年未有之大变局 网络空间成为继陆 海 空 天之后的第五大疆域 安全威胁也随之延伸至网络空间 没有网络安全就没有国家安全 在新时代网络空间安全已经上升至国家安全的高度 高级持续性威胁 Advanced Persistent
  • #PCIE# PCIE基础知识篇(3)

    写在前面 本文章转载自老狼知乎 感谢分享 随着AMD新一代CPU的发布 PCIe 4 0 Gen4 也进入了人们的视线 然而Intel随后宣传PCIe 4 0对消费市场用处不大 AMD则反讽Intel吃不到葡萄说葡萄酸 正在吃瓜群众搬板凳看
  • could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the n

    如果你在创建自定义网络时 docker network create driver bridge my net出现下面的提示 Error response from daemon could not find an available no
  • 【Vue3项目】登录注册--双Token机制

    目录 前言 什么是双Token机制 双Token的实现流程 前言 最近同项目的伙伴告诉我们一个 新词汇 双Token登录机制 emmmmm 确实没了解过 据说是在实现token长期有效的同时 防止token被第三方盗用 提高用户信息的安全性
  • ReactNative系列之十三WebStorm的JSX语法配置及自动补全设置

    1 开发ReactNative常用工具 WebStorm Sublime Atom 2 配置WebStorm的ReactNative语法 a 下载 git clone https github com virtoolswebplayer R
  • ES 搜索20 (function_score 和 field_value_factor 自定义评分)

    自定义评分 设想有个网站供用户发布博客并且可以让他们为自己喜欢的博客点赞 我们希望将更受欢迎的博客放在搜索结果列表中相对较上的位置 同时全文搜索的评分仍然作为相关度的主要排序依据 可以简单的通过存储每个博客的点赞数来实现它 在搜索时 可以将
  • DHCP协议及其实验(eNSP)

    目录 一 DHCP 1 1 DHCP作用 1 2 DHCP地址池 1 3 DHCP报文类型 1 4 DHCP工作原理 对DHCP工作原理的思考 1 5 DHCP租期更新 1 6 DHCP重绑定 1 7 IP地址释放 二 DHCP实验 2 1
  • C++控制台RPG游戏:对话系统

    具体实现思路 CTalk类继承窗口基类 里面封装了updata 和onRander 方法 里面包含了结构体SArrTalk m pArrTalk 用来存对话数据 CTalk类控制对话的进行 以及数据的渲染 而对话的内容则存在相应的文件之中
  • 使用OpenCV,Haar级联检测器进行面部、眼睛、嘴部检测

    使用OpenCV Haar级联检测器进行面部 眼睛 嘴部检测 1 效果图 2 原理 2 1 Haar级联是什么 2 2 Haar级联的问题与局限性 2 3 Haar级联预训练的模型 3 源码 3 1 图像检测 3 2 实时视频流检测 参考
  • 【进阶】使用Excel进行回归分析,预测真实值

    预备阅读 进阶 使用Excel进行相关分析 前言 昨天学习了Excel中的相关分析 在数据分析中 相关分析和回归分析关系紧密 今天来学习下Excel中的回归分析 回归分析 回归分析 regressionanalysis 是确定两种或两种以上
  • 向量大小和归一化(vector magnitude & normalization)、向量范数(vector norm)、标量/向量/矩阵/张量

    一 向量大小 首先一个向量的长度或者大小一般记为 上图中的平面向量的大小计算如下 空间向量的大小计算如下 维复向量的大小计算如下 二 向量归一化 向量归一化即将向量的方向保持不变 大小归一化到1 向量的归一化向量为 三 向量范数 范数是一种
  • ant design pro上传图片到后端

    我们这里是前端将图片上传到后端 然后后端这里再上传到阿里云的OSS 并返回一个文件的路径给前端 先看效果 上传后生成的图片 前端 pageList js const props name avatar listType picture ca