SpringBoot通过UUid实现文件上传接口及问题解决

本文介绍了如何在SpringMVC控制器中处理文件上传,包括方法定义、文件名处理、目录创建、异常处理以及应用配置中的路径转换。特别提到了常量类Constant和application.properties配置的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在controller中,添加对应的方法体:

 @PostMapping("/upload")
    @ResponseBody
    public ApiRestResponse upload(HttpServletRequest httpServletRequest, @RequestParam("file")MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename();
//        截取.前面的文件名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        UUID uuid = UUID.randomUUID();
        String newFileName = uuid.toString() + suffixName;
//        文件目录
        File fileDirectory = new File(Constant.FILE_UPLOAD_DIR);
//        文件名,Constant是我定义的常量类,具体内容在后面    
    File destFile = new File(Constant.FILE_UPLOAD_DIR + newFileName);
        if(!fileDirectory.exists()){
            if (!fileDirectory.mkdir()) {
                throw new PlatformException(PlatformExceptionEnum.MAKEIDR_FAILED);
            }
        }
        try {
//            需要注意,当你在transferTo这个方法中传入了相对路径,该方法会自动为你拼接上一个默认的路径,会导致虽然保存成功,但是你却找不到该文件
            file.transferTo(destFile);
        }catch (IOException e){
            e.printStackTrace();
        }
        try{
//            通过getHost方法回显,获得文件名
            return  ApiRestResponse.success(getHost(new URI(httpServletRequest.getRequestURI()+ "")) + "/files/" + newFileName);
        }catch (URISyntaxException e) {
            return ApiRestResponse.error(PlatformExceptionEnum.UPDATE_FAILED);
        }

    }

//回显方法

private URI getHost(URI uri){
    URI effectiveURI;
    try{
        effectiveURI = new URI(uri.getScheme(),uri.getUserInfo(),uri.getHost(),uri.getPort(),null,null,null);
    }catch( URISyntaxException e){
        effectiveURI = null;
    }
    return effectiveURI;
}

Constant的内容,需要注意的是@Value("${file.upload.dir}")中$符号后的是一对{},这里我已经踩过坑了。
 
对应在application.properties中的配置是,需要注意的是从本地计算机中复制过来的地址样式会是D:\src\main...,需要把\改成/,才能被正常读取,否则用这个路径去保存是一定会找不到的。另外结尾也要记得加上/,因为代码中是直接将地址和文件名拼接在一起,然后保存的,所以需要加上/。

注意的是,代码中还没有包含对静态资源的映射,需要添加一个config实现,缺少这个会影响保存后的显示


                
Spring Boot实现图片上传功能,可以使用`MultipartFile`接口来处理上传的文件。以下是一个简单的实现方式: 1. 在`pom.xml`文件中添加`spring-boot-starter-web`和`spring-boot-starter-tomcat`依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> ``` 2. 创建一个Controller类,实现图片上传接口: ```java @RestController public class ImageController { @PostMapping("/upload") public String uploadImage(@RequestParam("file") MultipartFile file) throws IOException { // 获取上传文件的原始文件名 String originalFilename = file.getOriginalFilename(); // 获取上传文件的扩展名 String extension = FilenameUtils.getExtension(originalFilename); // 生成新的文件名 String newFilename = UUID.randomUUID().toString() + "." + extension; // 保存文件到本地磁盘 File newFile = new File("C:/uploads/" + newFilename); file.transferTo(newFile); // 返回上传成功的消息 return "上传成功"; } } ``` 3. 在`application.properties`文件中配置上传文件的最大大小和临时存储路径: ``` spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB spring.servlet.multipart.location=C:/uploads/tmp ``` 以上代码中,我们使用了`@RequestParam("file")`注解来接收上传的文件,然后利用`MultipartFile`接口提供的方法获取文件名、扩展名等信息,并将文件保存到本地磁盘中。最后返回一个上传成功的消息。 需要注意的是,上传文件的最大大小和临时存储路径需要在`application.properties`文件中进行配置。在本例中,我们将上传文件的最大大小限制为10MB,临时存储路径为`C:/uploads/tmp`。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值