Springboot项目实现简单的文件服务器,实现文件上传+图片及文件回显

文章目录

写在前面

平常工作中的项目,上传的文件一般都会传到对象存储云服务中。当接手一个小项目,如何自己动手搭建一个文件服务器,实现图片、文件的回显,可以通过http请求获取到呢?

注!本文以Springboot为基础,在其web环境进行搭建的

一、配置

1、application.properties

bash 复制代码
local.file.dir=D:/file/
local.file.path=/data

2、webMvc配置

java 复制代码
@Configuration
public class WebmvcConfigurer implements WebMvcConfigurer {

    @Value("${local.file.dir}")
    private String localFileDir;

    @Value("${local.file.path}")
    private String localFilePath;

    @Override
    public void addResourceHandlers(@NotNull ResourceHandlerRegistry registry) {

        File file = new File(localFileDir);
        if (file.exists() && file.isFile()) {
            throw new RuntimeException("本地路径已被占用:" + localFileDir);
        }

        if(!file.exists()) {
            file.mkdirs();
        }

        registry.addResourceHandler(localFilePath + "/**").addResourceLocations("file:" + localFileDir);
    }

注意,此处的addResourceHandler是添加的我们访问时的路径,addResourceLocations添加的是本地文件路径,如果使用本地路径必须要加file:

3、查看效果

我们在D:/file/目录中存放一个aaa.jpg的文件,访问localhost:8080/data/aaa.jpg就可以获取到这张图片了!

二、文件上传

java 复制代码
@RestController
public class Controller {

    @Value("${local.file.dir}")
    private String localFileDir;

    @Value("${local.file.path}")
    private String localFilePath;

    @PostMapping("/upload")
    public Map<String, String> uploadFile(@RequestParam("file") MultipartFile file){
        Map<String, String> resultMap = new HashMap<>();
        //获取上传文件的原始文件名
        String fileName = file.getOriginalFilename();
        if(StringUtils.isBlank(fileName) || !fileName.contains(".")) {
            throw new RuntimeException("文件名有误!");
        }
        // uuid生成文件
        String fileLastName = fileName.substring(fileName.lastIndexOf('.'));
        String localFileName = UUID.randomUUID() + fileLastName;
        //保存文件
        FileUtils.saveFile(file, localFileDir + localFileName);
        // 拼文件名
        resultMap.put("url", localFilePath + "/" + localFileName);
        return resultMap;
    }
}

调用文件上传时,会返回一个文件的url:/data/aaa.jpg,此时再拼上域名就可以访问该文件了!

相关推荐
光电笑映5 小时前
网络通信基础:从协议分层到 Socket 编程预备
linux·运维·服务器·网络
孙启超5 小时前
【AI开发之Rust】第 7 课:错误处理 —— panic、Result 与 `?`
人工智能·分布式·后端·爬虫·spring cloud·架构·rust
烈风逍遥6 小时前
第一篇:SeaPack 全栈项目工程化实践
前端·后端·架构
烈风逍遥6 小时前
第二篇:SeaPack 权限体系:从"谁都能看"到"该看什么看什么"
前端·后端·架构
JoyT6 小时前
Spring AI 2.0 Agent 进阶:Memory、State 与 Context Engineering 常见技术全景
后端
拖孩6 小时前
这个小程序是 AI 帮我写的,可它里面一个 AI 功能都没有
前端·后端·微信小程序
mengge.cloud6 小时前
0917Docker 小白实验教程(理论+实操)
linux·服务器·网络·docker
白宇横流学长7 小时前
基于springboot的个人博客系统的设计与实现【源码+文档】
java·spring boot
leeyi7 小时前
Agent 要用 API key,但明文一次都不能进模型——Secret Runtime 落地实录(第110篇)
后端·aigc·agent
GreenTea7 小时前
发布 3 天登顶 HN:不生成一个字的模型 Jev,我把它的源码和黑料都扒了一遍
前端·后端·算法