热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nest上传图片

nest上传图片前端使用reactantd的upload效果importReact,{memo,useState,useEffect}fromreact;import{U

nest上传图片

前端使用react+antd的upload
效果
在这里插入图片描述
在这里插入图片描述

import React, { memo, useState, useEffect } from "react";
import { Upload as AntdUpload, message } from "antd";
import { LoadingOutlined, PlusOutlined } from "@ant-design/icons";import "./Upload.style.scss";
import { UploadChangeParam } from "antd/lib/upload";
import { RcFile, UploadFile } from "antd/lib/upload/interface";function getBase64(img: any, callback: any) {const reader = new FileReader();reader.addEventListener("load", () => callback(reader.result));reader.readAsDataURL(img);
}function beforeUpload1(file: any) {const isJpgOrPng &#61; file.type &#61;&#61;&#61; "image/jpeg" || file.type &#61;&#61;&#61; "image/png";if (!isJpgOrPng) {message.error("You can only upload JPG/PNG file!");}const isLt2M &#61; file.size / 1024 / 1024 < 2;if (!isLt2M) {message.error("Image must smaller than 2MB!");}return isJpgOrPng && isLt2M;
}interface Props {onChange?: (imgUrl: string) &#61;> void;beforeUpload?: (file: any) &#61;> boolean;value?: string;[k: string]: any;
}export const Upload: React.FC<Props> &#61; memo(({ onChange, value, beforeUpload &#61; beforeUpload1, ...otherProps }: Props) &#61;> {const [loading, setLoading] &#61; useState(false);const [img, setImg] &#61; useState("");const uploadButton &#61; (<div>{loading ? <LoadingOutlined /> : <PlusOutlined />}<div style&#61;{{ marginTop: 8 }}>Upload</div></div>);useEffect(() &#61;> {if (value) {setImg(value);}}, [value]);const handleChange &#61; (info: any) &#61;> {if (info.file.status &#61;&#61;&#61; "uploading") {setLoading(true);return;}if (info.file.status &#61;&#61;&#61; "done") {// Get this url from response in real world.getBase64(info.file.originFileObj, () &#61;> {setImg(info.file.response.url);onChange && onChange(info.file.response.url);});}};return (<div className&#61;{"upload"}><AntdUploadname&#61;"file"listType&#61;"picture-card"showUploadList&#61;{false}action&#61;"http://localhost:5000/upload"beforeUpload&#61;{beforeUpload}onChange&#61;{handleChange}{...otherProps}>{img ? (<img src&#61;{img} alt&#61;"avatar" style&#61;{{ width: "100%" }} />) : (uploadButton)}</AntdUpload></div>);}
);

在这里插入图片描述
这个handleChange使处理后台返回来的值&#xff0c;我们约定后台的是一个包含文件类型的值&#xff0c;就可以通过状态来判断是否成功&#xff0c;做出对应的操作。

这里是在formItem完成的&#xff0c;所以要实现两个value,和一个onChange
在这里插入图片描述
定义内部图片状态&#xff0c;上传后先显示
在这里插入图片描述
在这里插入图片描述
外部value改变时再改变该状态
在这里插入图片描述
在这里插入图片描述
formitem需要执行一个valuePropName的名字为value,而trigger用于设置收集字段值变更的时机。由onChange事件的发生来收集value&#xff0c;这样就相当于一个普通的formItem了。

后台实现&#xff1a;

在这里插入图片描述
由于我们使用nest并且基于exprss框架的&#xff0c;所以我们使用一个库来完成&#xff0c;有点类似于express的multer。
在主模块中使用import来注册&#xff0c;里面可以配置路劲&#xff0c;还有文件名。
看看express的配置
在这里插入图片描述
有点类似&#xff0c;都是配置storage&#xff0c;然后注册。这样上传的文件就会到达uploads文件夹里了。

我们上传到uploads文件夹后&#xff0c;需要返回改路劲给前端

在这里插入图片描述
我们在控制器中定义一个接口&#xff0c;处理文件&#xff0c;图中的api是nest提供的&#xff0c;可以获取到上传文件的file。此时的file已经通过处理并且上传到uploads了&#xff0c;所以可以通过file.filename拿到路劲。最后返回该文件即可。

静态资源开放

我们返回文件的路劲之后还要开放静态资源&#xff0c;不然前端访问不到&#xff0c;
在这里插入图片描述
也是基于express&#xff0c;所以使用同一个库&#xff0c;将其uploads的资源开放出来。这样前端就能正常访问了。
效果如开头那样


推荐阅读
  • 加密、解密、揭秘
    谈PHP中信息加密技术同样是一道面试答错的问题,面试官问我非对称加密算法中有哪些经典的算法?当时我愣了一下,因为我把非对称加密与单项散列加 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 七牛的上传图片中,php如何上传base64的图片 ... [详细]
  • 【Python 爬虫】破解按照顺序点击验证码(非自动化浏览器)
    #请求到验证码base64编码json_img_datajson_raw.get(Vimage)#获取到验证码编码 #保存验证码图片到本地defbase64_to_img(bstr ... [详细]
  • 今天周六,原则上要休息,但想到下周还有一堆任务,还是先做一部分工作吧,就把之前做的票面设计器改了改,增加了上传图片和更换背景底图的功能。现在打算整理下这个设计器,也算对齐一个总结。不过这属于我们部门的 ... [详细]
author-avatar
xin新的
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有