案例-15.文件上传-本地存储

一.实现

上一集中我们实现了文件上传,但是只是生成了临时文件,当上传过程完成后,临时文件会被自动清理掉,因此我们要将上传上来的文件存储起来。

我们针对Controller层中的UploadController.java类进行改造,从而实现上传文件到本地的过程。

java 复制代码
@Slf4j
@RestController
public class UploadController {
    
    @PostMapping("/upload")
    public Result upload(String name, Integer age, MultipartFile file) {
        log.info("文件上传:{},{},{}",name, age, file);
        
        file.transferTo(new file("D:\\tlias-file\\image\\"))     

    }
}

1.使用transferTo将要转存的文件存入指定的位置当中,但是并不能把文件名写死,因为如果有同名文件进行上传会将原文件覆盖掉,因此我们要每次生成不同的文件名。那么每次如何生成不同的文件名呢?要使用通用唯一识别码UUID。

2.UUID是通用唯一识别码是一个长度固定且唯一的字符串,那么如何生成UUID呢?我们在单元测试类中进行演示:

java 复制代码
package com.gjw;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.io.Decoders;
import io.jsonwebtoken.security.Keys;
import jakarta.websocket.Decoder;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.crypto.SecretKey;
import java.util.*;

//@SpringBootTest
class TliasWebManagementApplicationTests {

    @Test
    void contextLoads() {
    }

    @Test
    void textUuid() {
        for (int i = 0; i < 1000; i++) {
            String uuid = UUID.randomUUID().toString();
            System.out.println(uuid);
        }
    }
}

通过UUID的randomUUID方法并使用toString()方法将生成的UUID转化成为字符串,我们生成了1000个不同的uuid。如下:

我们将UUID中的代码加入到controller层中,

当使用multipartfile进行上传文件时,文件的文件名已经存储在了multipartfile对象当中。

此外,我们还要获取到文件的后缀名,因此要从文件名中获取文件的后缀。

java 复制代码
@Slf4j
@RestController
public class UploadController {
    
    @PostMapping("/upload")
    public Result upload(String name, Integer age, MultipartFile file) {
        log.info("文件上传:{},{},{}",name, age, file);
        
        String fileName = file.getOriginalFilename();  // 使用getOriginalFilename()获取文件名
        int index = fileName.lastIndexOf(".")   // 获取文件名的最后一个.所在的索引
        String extname = fileName.substring(index);     // 从最后一个.开始截取到字符串最后
        String newFileName = UUID.randomUUID().toString() + extname;    // 拼接上UUID

        file.transferTo(new file("D:\\tlias-file\\image\\"+newFileName))  // 拼接上路径
        return Result.success();
    }
}

二.配置修改

当上传超过1M的大型数据时,会报错 超出文件上传的最大大小,因此要修改上传文件的最大大小限制。

找到application.properties文件,将上述配置加入进去。

XML 复制代码
servlet.multipart.max-file-size= 10MB
servlet.multipart.max-request-size= 100MB

单个文件上传大小最大为10MB,而单次上传(一次上传可以上传多个文件)最大大小为100MB

三.本地存储的弊端

因此后面会改成云存储。

相关推荐
珹洺2 分钟前
Jsp技术入门指南【十四】实现基于MySQL+JDBC+JSP数据库验证的登录界面与登录跳转功能
java·运维·数据库·mysql·servlet
能来帮帮蒟蒻吗6 分钟前
Python -将MP4文件转为GIF图片
开发语言·python·学习·视频
像风一样自由20209 分钟前
MQTT协议技术详解:深入理解物联网通信基础
java·物联网·struts
JhonKI10 分钟前
【MySQL】日志缓冲区详解 以及 InnoDB内存结构总结
数据库·mysql·oracle
忆源10 分钟前
【Qt】之音视频编程2:QtAV的使用篇
开发语言·qt·音视频
源码方舟14 分钟前
基于SpringBoot+Vue的房屋租赁管理系统源码包(完整版)开发实战
vue.js·spring boot·后端
oneDay++25 分钟前
# IntelliJ IDEA企业版开发入门:包、类与项目结构详解
java·经验分享·学习·intellij-idea·学习方法
程序员阿鹏26 分钟前
Git的安装和配置(idea中配置Git)
java·开发语言·ide·git·intellij-idea·idea
景天科技苑37 分钟前
【Rust trait特质】如何在Rust中使用trait特质,全面解析与应用实战
开发语言·后端·rust·trait·rust trait·rust特质
PacosonSWJTU41 分钟前
python使用matplotlib画图
开发语言·python·matplotlib