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

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值