Java实现对象文件存储的三种方式(本地存储、OSS存储、Minio存储)
一、本地存储
本地存储就是将前端传过来的文件存储到本次磁盘中。并且为了防止文件名相同而导致文件被覆盖,使用UUID来为文件命名。UUID (Universally Unique IDentifier) 通用唯一识别码 ,也称为 GUID (Globally Unique IDentifier) 全球唯一标识符。
代码实现
1.配置文件,在application.xml中添加以下配置,限制文件的大小。
spring:
servlet:
multipart:
max-file-size: 100MB #配置单个文件上传的大小限制
max-request-size: 100MB #配置单个请求最大的文件大小限制
enabled: true
2.controller接口
@RestController
@Slf4j
@RequestMapping("/uploadDemo")
public class Local {
/**
* 本地存储
*/
@PostMapping("/local")
public R localUpload(@RequestParam MultipartFile image) throws IOException {
//获取文件名
String originalFilename = image.getOriginalFilename();
//设置文件新名
String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
//将文件存储到本地磁盘中
image.transferTo(new File("D:\\picture\\"+ newFileName));
return R.ok();
}
}
3.postman发送请求
4.查看磁盘目录是否已经保到本地
二、阿里云OSS对象存储
阿里云OSS对对象存储介绍
阿里云OSS对象存储是一款海量、安全、低成本、高可靠的云存储服务。使用OSS可以通过网络随时存储和调用包括音频、视频和图片在内的文件。
代码实现
1.导入依赖
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.3</version>
</dependency>
2.在application.xml中配置OSS
OSS:
endpoint:
accessKeyId:
accessKeySecret:
bucketName:
3.编写接口
/**
* OSS存储
*/
@PostMapping("/OSS")
public R OSSUpload(@RequestParam MultipartFile image) throws IOException {
//获取上传文件的输入流
InputStream inputStream = image.getInputStream();
//获取文件名
String originalFilename1 = image.getOriginalFilename();
//设置文件新名
String newFileName = UUID.randomUUID() + originalFilename1.substring(originalFilename1.lastIndexOf("."));
//上传文件到OSS
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
ossClient.putObject(bucketName, newFileName, inputStream);
//文件访问路径
String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + newFileName;
// 关闭ossClient
ossClient.shutdown();
return new R().put("url: ", url);
}
4.postman测试
5.查看是否存储到服务器中
三、minio存储
MinIO基于Apache License v2.0开源协议的对象存储服务,可以做为云存储的解决方案用来保存海量的图片,视频,文档。
代码实现
1.导入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.0</version> <!-- 使用最新版本 -->
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.3</version>
</dependency>
2.在application.yml中添加配置
minio:
endpoint:
accessKey:
secretKey:
bucketName:
3.编写接口
/**
* Minio存储
*/
@PostMapping("/Minio")
public R Minio(@RequestParam MultipartFile image) throws IOException, ServerException, InsufficientDataException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
//获取源文件名
String originalFilename = image.getOriginalFilename();
//设置新文件名
String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
//获取上传文件的输入流
InputStream inputStream = image.getInputStream();
//上传文件
MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();
minioClient.putObject(PutObjectArgs.builder()
.bucket(bucketName)
.object(newFileName)
.stream(inputStream, inputStream.available(),-1)
.contentType(image.getContentType())
.build());
String url = endpoint + "/" +bucketName + "/" + newFileName;
return new R().put("url", url);
}
4.postman测试
5.查看文件是否上传到Minio
作者:大哥,是是是我呀