JavaWeb学习路线(7)——文件上传

一、概念

(一)文件上传概念: 指将本地的图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。

在这里插入图片描述

(二)前端文件上传三元素

  • method=“post”(form)
  • enctype=“multipart/form-data”(form)
    enctype 指的是 Encode Type 编码格式
  • type=“file”(input)
<form method="post" action="/upload" enctype="multipart/form-data">
	<input type="file" name="image" />
	<input type="submit" />
</form>

(三)后端文件上传

@RestController
public class UploadController{
    
    
	@PostMapping("/upload")
	public Result upload(@RequestParam("image") MultipartFile image){
    
    
		return Result.success();
	}
}

二、本地存储

(一)概念: 本地存储是将本机作为服务器进行存储文件。

(二)MultipartFile类的相关API

方法 说明
String getOriginalFilename() 获取原始方法名
void transferTo(File dest) 将接收的文件存储到磁盘上
long getSize() 获取文件的大小(Byte)。
byte[] getBytes() 获取文件内容的字节数组
InputStream getInputStream() 获取接收文件的输入流

(三)实现方法——transferTo(File file)

@RestController
public class UploadController{
    
    
   @PostMapping("/upload")
   public Result upload(@RequestParam("image") MultipartFile image){
    
    
   	//获取文件原始名
   	String originalFilename= image.getOriginalFilename();
   	
   	//本地存储
   	image.transferTo(new File("指定存储地址\\" + originalFilename));  //可以自定义文件名
   
   	return Result.success();
   }
}

(四)注意的问题

1、重复文件名覆盖

由于网站面向用户并发,所以我们需要区分上传的文件,我们可以使用唯一标识的方式命名文件(UUID,雪花算法等等…)

2、本地存储大小的限制

上传文件必定有大小,有大小必定有默认值,SpringBoot 默认单个文件最大大小为 1 MB , 通过以下配置进行修正。

spring:
	servlet:
		multipart:
			#单个文件上传的大小
			max-file-size: 10MB
			#一次请求上传的大小
			max-request-size: 100MB

3、本地存储的局限性

  • 浏览器无法直接访问服务器
  • 服务器无法随意扩容(服务器比较贵)
  • 服务器磁盘可能面临损坏的情况

4、解决方案

  • 本地服务器(FastDFS文件系统、MinIO系统…)
  • 云服务器(阿里云、腾讯云、华为云…)

三、云存储(以阿里云为例)

官方地址: 阿里云-对象存储OSS

猜你喜欢

转载自blog.csdn.net/Zain_horse/article/details/131425094
今日推荐