【SpringBoot】Day11-03 文件存储

本地存储

受限

开发中比较少用

如果直接存储在服务器的磁盘目录中,存在以下缺点:

  • 不安全:磁盘如果损坏,所有的文件就会丢失

  • 容量有限:如果存储大量的图片,磁盘空间有限(磁盘不可能无限制扩容)

  • 无法直接访问

为了解决上述问题呢,通常有两种解决方案:

  • 自己搭建存储服务器,如:fastDFS 、MinIO

  • 使用现成的云服务,如:阿里云,腾讯云,华为云

Controller 层

  • 需要注意的是:
    • 避免相同文件名的覆盖,所以采取了使用UUID
    • 但是使用UUID也只是随机生成一个文件名,但是没有后缀,因此,需要获得后缀,之后加上去

MultipartFile 常见方法:

  • String getOriginalFilename(); //获取原始文件名

  • void transferTo(File dest); //将接收的文件转存到磁盘文件中

  • long getSize(); //获取文件的大小,单位:字节

  • byte[] getBytes(); //获取文件内容的字节数组

  • InputStream getInputStream(); //获取接收到的文件内容的输入流

java 复制代码
@Slf4j
@RestController
public class UploadController {

    @PostMapping("/upload")
    public Result upload(String name, Integer age, MultipartFile image) throws IOException {
        log.info("文件上传 {},{},{}",name,age,image);

        //获取原始文件名
        /**
         * 直接使用原始名是有问题的,如果相同的命名文件上次,会覆盖之前的文件
         */
        String originalFilename = image.getOriginalFilename();

        // 构造唯一的文件名(不能重复) --uuid(通用唯一识别码) 然后还需要加上扩展名
        //截取最后一个.后面的即是扩展名

        String extname=originalFilename.substring(originalFilename.lastIndexOf("."));
        String newFilename= UUID.randomUUID().toString()+extname;   //随机名+文件扩展名
        //将文件存储在服务器磁盘中 E:\images
        /**
         * 文件名不能写死,避免只有一个文件,和文件格式不一样的情况
         * 下面这个方法会爆红,需要抛出异常
         */
        image.transferTo(new File("E:\\images\\"+newFilename));

        return Result.success();
    }
}

解除限制大小

那么如果需要上传大文件,可以在application.properties进行如下配置:

复制代码
配置单个文件最大上传大小
spring.servlet.multipart.max-file-size=10MB
​
配置单个请求最大上传大小(一次请求可以上传多个文件)
spring.servlet.multipart.max-request-size=100MB

阿里云OS

相关推荐
qq_401700412 小时前
Linux磁盘配置与管理
linux·运维·服务器
恒创科技HK2 小时前
香港大带宽服务器能降低ping值吗 ?
运维·服务器
爱代码的小黄人2 小时前
华硕主板BIOS设置台式机电脑“Restore AC Power Loss”(断电后恢复状态)设置
运维·服务器·电脑
中电金信3 小时前
云原生时代,应用运维模式如何破局?
运维·云原生
ringking1233 小时前
docker源文件配置以及密钥文件
运维·docker·容器
Code Warrior3 小时前
【Linux】传输层协议UDP
linux·运维·udp
Evan芙4 小时前
Bash 变量命名规则与类型使用
linux·运维·开发语言·chrome·bash
menge23335 小时前
Linux网站搭建
linux·运维·网络
Bruce_Liuxiaowei5 小时前
Kali Linux 加入 Windows 域实战指南:解决域发现与加入失败问题
linux·运维·windows
梁正雄5 小时前
linux服务-nginx原理与安装-1
linux·运维·nginx