2021-08-11

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

SpringBoot+Vue中实现文件上传(图片)

1、导入依赖

<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.7.3</version>
</dependency>

2、编写Controller上传接口

@Value("${server.port}")
private String port;

private static final String ip="http://localhost";
/**
 * 上传接口
 * @param file
 * @return editor/upload
 * @throws IOException
 */
@PostMapping("/upload")
public Result<?> upload(MultipartFile file) throws IOException {
    String originalFilename = file.getOriginalFilename();  // 获取源文件的名称
    // 定义文件的唯一标识(前缀)
    String flag = IdUtil.fastSimpleUUID();
    String rootFilePath = System.getProperty("user.dir") + "/files/" + flag + "_" + originalFilename;  // 获取上传的路径
    FileUtil.writeBytes(file.getBytes(), rootFilePath);  // 把文件写入到上传的路径
    return Result.success(ip + ":" + port + "/files/" + flag);  // 返回结果 url
    //return Result.success();
}

3、编写Controller下载接口

/**
* 下载接口
* @param flag
* @param response
*/
@GetMapping("/{flag}")
public void getFiles(@PathVariable String flag,HttpServletResponse response) {
	OutputStream os;  // 新建一个输出流对象
	String basePath = System.getProperty("user.dir") + "/files/";  // 定于文件上传的根路径
	List<String> fileNames = FileUtil.listFileNames(basePath);  // 获取所有的文件名称
	String fileName = fileNames.stream().filter(name -> name.contains(flag)).findAny().orElse("");  // 找到跟参数一致的文件
	try {
	    if (StrUtil.isNotEmpty(fileName)) {
	        response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
	        response.setContentType("application/octet-stream");
	        byte[] bytes = FileUtil.readBytes(basePath + fileName);  // 通过文件的路径读取文件字节流
	        os = response.getOutputStream();   // 通过输出流返回文件
	        os.write(bytes);
	        os.flush();
	        os.close();
	    }
	} catch (Exception e) {
	    System.out.println("文件下载失败");
	}
}

4、在vue界面中显示
1)、上传

<el-form-item label="封面" >
    <el-upload ref="upload" action="http://localhost:6060/singer/upload" :on-success="filesUploadSuccess">
        <el-button  type="primary">点击上传</el-button>
    </el-upload>
</el-form-item>

2)、上传成功后清除显示的文件

methods: {
    filesUploadSuccess(res){
         console.log(res);
         this.form.pic=res.pic;
     },
     add(){
         this.dialogVisible=true;
         this.form={};
         if(this.$refs['upload']){
             this.$refs['upload'].clearFiles();//清空历史文件列表
         }
     }
}

3)、显示

<el-table-column label="封面">
    <template #default="scope">
        <el-image
                style="width: 100px;height: 100px"
                :src="scope.row.pic"
                :preview-src-list="[scope.row.pic]">

        </el-image>
    </template>
</el-table-column >
从CVE-2023-17233漏洞挖掘到批量自动化渗透测试实战 在Web安全领域,路径遍历(Path Traversal)是一种经典的漏洞类型,其原理在于应用程序未对用户输入的文件路径参数进行充分验证和规范化,导致攻击者可以通过构造包含“../”等序列的输入,访问预期目录之外的文件系统。这种漏洞的技术价值在于,它往往能直接导致敏感信息泄露,例如读取系统配置文件、应用程序源码或数据库凭证,为后续的权限提升和内网横向移动提供关键跳板。在诸如校园网、企业OA等由标准化产品构成的网络环境中,特定厂商的特定系统(如锐捷自助服务平台)一旦被曝出此类漏洞,其影响范围往往非常广泛。这便 阅读详情

相关推荐

Spring学习笔记_26——LWT

LWT,即运行时织入(Load-time Weaving),是Spring框架中面向切面编程(AOP)的一种实现方式。

LuckyLay的博客 813

项目中的文件上传与下载

继续丰富我们的项目功能。 这次是文件上传的功能,而在我们的element官网上是有文件上传的组件功能的,我们直接拿来用就行。 老方法,粘贴复制。但是上图的服务器接口(也就是上传下载的路由地址)我们需要自己去写,所以现在去后端服务器上写一个接口,FileController: 同时我们在resources文件下创建一个files文件夹,这个文件夹就是用来存放从前台上传过来的文件的。 因为写入文件的时候要使用IO流,但是java的原生io过于繁琐和麻烦,所以我们使用hutool这个工具,在pom中引入:

qq_53324833的博客 891

MyBatis-Plus的使用

MyBatis-Plus学习笔记 一、MySQL 1、创建表 DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMM

qq_53850081的博客 503

Java_面向对象笔记总结(一)

面向对象 (1):特点  1:将复杂的事情简单化。  2:面向对象将以前的过程中的执行者,变成了指挥者。  3:面向对象这种思想是符合现在人们思考习惯的一种思想。 (2)匿名对象使用场景:  1:当对方法只进行一次调用的时候,可以使用匿名对象。  2:当对象对成员进行多次调用时,不能使

LWT的专栏 1989

2021-11-08

解决下载vscode慢的问题 mac下载地址 https://vscode.cdn.azure.cn/stable/b3318bc0524af3d74034b8bb8a64df0ccf35549a/VSCode-darwin-universal.zip 以上是mac下载地址,下载vscode版本为 2021.11.08 当前日期最新版本

weixin_44696379的博客 138

大地win11 32位旗舰版镜像v2021.08

大地win11 32位旗舰版镜像v2021.08是一款专为笔记本用户准备的电脑系统,这是一个镜像系统,所以安装速度非常快,且充满了独具的特色,让你可以快速的将系统完成安装,而且不用激活,安装完成就能立即使用,大大节省用户时间! 大地win11 32位旗舰版镜像v2021.08 一、系统特点 1、确定目标机器的类型。如果是台式电脑,打开数字小键盘关闭键盘更方便。 2、系统经过优化,启动服务经过仔细筛选,确保优化的同时保证系统的稳定。 3、系统安装完毕自动卸载多余驱动,稳定可靠,确保恢复效果接近全新安装版。 4

yisago的博客 222

深度技术win11 32位稳定版系统v2021.08

深度技术win11 32位稳定版系统v2021.08以微软官方原版作为母盘对系统进行了全面优化更新,用户使用更加流畅顺手,轻松体验到系统的优秀性能,适用目前市场最新机型以及老旧机型,多种安装方式供用户选择,且更新时间短无需用户等待。 深度技术win11 32位稳定版系统v2021.08 一、系统特点 1、确定目标机器的类型。如果是台式电脑,打开数字小键盘关闭键盘更方便。 2、屏蔽很多浏览网页时自动弹出的IE插件,开启路由和IP过滤,关闭自动列表。 3、提前激活windows个人设置更新,提高系统恢复速度,关

yisago的博客 779

雨林木风win11 64位全新专业版系统v2021.08

雨林木风win11 64位全新专业版系统v2021.08是目前非常火热的电脑操作系统,系统运行速度非常的快速,拥有稳定、安全、兼容性强等特点,多样化的服务可供你的使用,支持在线的升级,非常的便捷,可以提高系统的性能,用户可以直观地提高了整个系统的运行速度和效率。 雨林木风win11 64位全新专业版系统v2021.08 一、系统特点 1、轻松满足用户的操作需求,可以帮助用户激活正版权限,提供正版补丁优化检测。 2、可以很好的满足用户在系统交互的各个方面的需求,是非常优质的全新系统版本。 3、经过完美优化,在

yisago的博客 897

雨林木风win11 64位原版系统v2021.08

雨林木风win11 64位原版系统v2021.08具有很强的兼容性和稳定性,能适配所有型号的电脑并进行安装,绝大部分的硬件驱动也能完美兼容,提供多种装机方式,用户可以自由的选择,非常适合有装机需求的用户。 雨林木风win11 64位原版系统v2021.08 一、系统特点 1、轻松满足用户的操作需求,可以帮助用户激活正版权限,提供正版补丁优化检测。 2、可以很好的满足用户在系统交互的各个方面的需求,是非常优质的全新系统版本。 3、经过完美优化,在不影响操作的情况下,帮助精简系统中的鬼程序等不常用的组件。 4、

yisago的博客 951

萝卜家园win11系统32位微软原版镜像v2021.08

萝卜家园win11系统32位微软原版镜像v2021.08是一款具备了稳定、快速和安全稳定特点的Win11系统,采用了全新的智能安装技术,安装完成后能自动激活,支持全面的驱动,可以完美的兼容各种硬件和软件,且自带安全功能,非常的好用,而且不用激活,安装完成就能立即使用,大大节省用户时间! 萝卜家园win11系统32位微软原版镜像v2021.08 一、系统特点 1、是非常专业的系统,有着全新便捷的交互功能,让用户享受最完整的操作模式。 2、系统的运行环境得到充分优化,可以在很多的方面为用户提供最好的服务环境。

yisago的博客 489

大地win11 64位旗舰版系统v2021.08

大地win11 64位旗舰版系统v2021.08是一款非常稳定的电脑操作系统,集成多个针对系统用户优化的补丁,且无需输入相关的序列号等,可以完美激活合法权益,感兴趣的用户们就快来下载使用该系统吧。 大地win11 64位旗舰版系统v2021.08 一、系统特点 1、兼容各种硬件设备。能更好的完成用户的安装,有效使用。 2、农民除了使用各种系统服务外,还赠送了许多常用的系统工具。 3、用户可以下载新软件,操作系统兼容软件流程,兼容性也很高。 4、安装后,为用户提供真正的数字桩激活和管理员权限,很实用。 5、尽

yisago的博客 291

技术员联盟win11系统64位专业版镜像v2021.08

技术员联盟win11系统64位专业版镜像v2021.08以微软官方原版作为母盘对系统进行了全面优化更新,用户使用更加流畅顺手,轻松体验到系统的优秀性能,适用目前市场最新机型以及老旧机型,多种安装方式供用户选择,且更新时间短无需用户等待。 技术员联盟win11系统64位专业版镜像v2021.08 一、系统特点 1、轻松满足用户的操作需求,可以帮助用户激活正版权限,提供正版补丁优化检测。 2、可以很好的满足用户在系统交互的各个方面的需求,是非常优质的全新系统版本。 3、经过完美优化,在不影响操作的情况下,帮助精

yisago的博客 687

java中如何把2021-04-05T11:22:23.349+08:00转成Date呢

java中如何把2021-04-05T11:22:23.349+08:00转成Date呢 public static Date dealDateFormat(String oldDateStr) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); try { Date date = df.parse(oldDateStr); return date; }

qq_43153224的博客 5474

java怎么转换Fri Jul 02 11:25:49 GMT+08:00 2021转为2021-07-03 11:25:49

java怎么转换Fri Jul 02 11:25:49 GMT+08:00 2021转为2021-07-03 11:25:49 SimpleDateFormat df=new SimpleDateFormat("EEE MMM dd hh:mm:ss z yyyy", Locale.ENGLISH); Date date=df.parse(s); SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.ou

weixin_54393974的博客 1037
下一篇: 2021-08-11
Java_lwt
博客等级 码龄6年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值