借助阿里云的文件存储服务【对象存储OSS】,将上传的文件存储到阿里云服服务器中。
文件上传流程
先安装依赖
<!--阿里云对象存储服务依赖-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>
FileUploadControoler
package com.powernode.controller;
import cn.hutool.core.date.DateUtil;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.powernode.config.AliyunOSSConfig;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.net.URL;
import java.util.Date;
/**
* 文件上传控制层
*/
@Api(tags = "文件上传接口管理")
@RequestMapping("admin/file")
@RestController
public class FileUploadController {
@Autowired
private AliyunOSSConfig aliyunOSSConfig;
/**
* 上传文件:
* 1.接口要求请求方式必须是post请求
* 2.接收文件的对象的类型是:MultipartFile该对象是SpringMVC提供的
* @return
*/
@ApiOperation("上传单个文件")
@PostMapping("upload/element")
public String uploadFile(MultipartFile file) {
// 填写Bucket名称
String bucketName = aliyunOSSConfig.getBucketName();
// 以天为单位的名称,作为文件夹名称
String newFolderName = DateUtil.format(new Date(), "yyyy-MM-dd");
// 以时间戳作为文件的新名称
String newFileName = DateUtil.format(new Date(), "HHmmssSSS");
// 获取原文件的后缀名称
String originalFilename = file.getOriginalFilename();
String fileSuffix = originalFilename.substring(originalFilename.lastIndexOf("."));
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
String objectName = newFolderName+"/"+newFileName+fileSuffix;
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(aliyunOSSConfig.getEndpoint(), aliyunOSSConfig.getAccessKeyId(), aliyunOSSConfig.getAccessKeySecret());
URL url = null;
try {
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, file.getInputStream());
// 上传
ossClient.putObject(putObjectRequest);
// 创建上传文件访问的url地址
url = ossClient.generatePresignedUrl(bucketName, objectName, DateUtil.offsetDay(new Date(), 365 * 10));
} catch (Exception ce) {
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
return url.toString();
}
}
编写配置文件bootstrap.yml
aliyun:
oss:
endpoint: oss-cn-beijing.aliyuncs.com
bucketName: abc-shop
accessKeyId: LTAI5t9XZiy6XQRyVhszD5zy
accessKeySecret: 9LX317PFh6wt2JlUfcjj4vd5PThPO3
写一个阿里云平台-对象存储OSS服务配置类,通过注入配置类来获取参数的值
package com.powernode.config;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
/**
* 阿里云平台-对象存储OSS服务配置类
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
@RefreshScope
public class AliyunOSSConfig {
/**
* 访问地址
*/
private String endpoint;
/**
* bucket名称
*/
private String bucketName;
/**
* 访问ID
*/
private String accessKeyId;
/**
* 访问密钥
*/
private String accessKeySecret;
}