SpringBoot上传和下载文件的原理解析

网友投稿 771 2022-12-31

SpringBoot上传和-文件的原理解析

SpringBoot上传和-文件的原理解析

技术概述

我们的项目是实现一个论坛。在论坛上发布博客时应该要可以上传文件,用户阅读博客是应该要可以-文件。于是我去学习了SpringBoot的上传和-文件,我感觉技术的难点在于使用图床并隐藏文件真实的存放地址。

技术详述

针对使用自己的服务器作为图床,

首先配置WebMvcConfigurer,SpringBoot2.0以后的版本可以使用WebMvcConfigurer实现类方式来进行配置

即创建一个实体类实现WebMvcConfigurer接口

public class WebConfiguration implements WebMvcConfigurer {

}

override它的方法,用来做自定义资源映射

addResourceHandlers(ResourceHandlerRegistry rOULWkvregistry)

在springboot中,我们可以通过重写addResouhttp://rceHandlers方法来映射静态资源目录;

具体做法:重写该类的addResourceHandlers方法;其中addResourceHandler指向映射路径,addResourceLocations指向资源文件路径;

资源文件路径地址必须以/结尾,指向文件目录上一层;

public static final String FILE_ATTACHMENT_SAVE_ROOT = "/root/**/";

public static final String ORIGINAL_ATTACHMENT_ADDRESS = "/files/**";

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

registry.addResourceHandler(ORIGINAL_ATTACHMENT_ADDRESS).addResourceLocations("file:" + FILE_ATTACHMENT_SAVE_ROOT);

}

上传文件,将文件地址保存到数据库

public ResponseMessage releaseBlog( @RequestParam(value = "attachments", required = false) MultipartFile[] attachments) throws IOException {

http:// if (attachments != null) {

for (MultipartFile attachment : attachments) {

File file = new File((WebConfiguration.FILE_ATTACHMENT_SAVE_ROOT + UUID.randomUUID() + attachment.getOriginalFilename()).replace("-", ""));

try {

attachment.transferTo(file);

} catch (IOException e) {

if (file.exists()) {

file.delete();

}

e.printStackTrace();

throw new BaseException(ExceptionInfo.UPLOAD_ATTACHMENT);

}

}

}

}

-文件:先对数据库进行查询,返回给前端映射后的地址,前端界面将映射后的地址显示给用户,用户通过映射后的地址可以-到文件。

问题及解决过程

在进行接口测试时,我直接将本地文件的地址上传当做前端传给后端的参数,发现会失败,因此导致无法理解前端传来的地址是什么(虽然不会影响后端编程,但我觉得可以加深理解),后来去查看了相关文档函数,发现前端上传文件时会先将文件的地址设为一个临时地址,然后将这个临时地址传到后端。

要注意其中在进行自定义资源映射时,addResourceHandler指向映射路径,addResourceLocations指向资源文件路径,资源文件路径地址必须以/结尾,指向文件目录上一层。我在写代码时不理解,导致上传文件那部分,存http://入数据库的地址一开始出错。

总结

文件上传的功能很常见,但是很多人并不清楚文件上传后的具体原理。可以使用自己的服务器用来保存实际文件,这种具体实现要配置一个虚拟路径来映射文件的真实绝对路径。这种做法更安全,同时使外网可以直接访问。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小程序开发(小程序开发一个多少钱啊)
下一篇:政务一网通办心得体会(一网通办工作和建议)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~