1. 引入pom依赖
<!-- 腾讯云COS依赖 -->
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>5.6.54</version>
</dependency>
<!-- 日期工具栏依赖 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
2.yml配置
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
servlet:
multipart:
max-file-size: 1024MB
max-request-size: 1024MB
3.FileService
public interface FileService {
//文件上传
String upload(MultipartFile file);
}
4.FileServiceImpl
@Service
public class FileServiceImpl implements FileService {
@Override
public String upload(MultipartFile file) {
// Endpoint以杭州为例,其它Region请按实际情况填写。
String bucketName = "你的桶名";
// 1 初始化用户身份信息(secretId, secretKey)。
String secretId = "你的id";
String secretKey = "你的key";
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
// 2 设置 bucket 的地域
// clientConfig 中包含了设置 region, https(默认 http),超时, 代理等 set 方法
Region region = new Region("你的地域如:ap-beijing");
ClientConfig clientConfig = new ClientConfig(region);
// 这里建议设置使用 https 协议
// 从 5.6.54 版本开始,默认使用了 https
clientConfig.setHttpProtocol(HttpProtocol.https);
// 3 生成 cos 客户端。
COSClient cosClient = new COSClient(cred, clientConfig);
try{
// 指定要上传的文件
InputStream inputStream = file.getInputStream();
// 指定文件将要存放的存储桶
// 指定文件上传到 COS 上的路径,即对象键。例如对象键为folder/picture.jpg,则表示将文件 picture.jpg 上传到 folder 路径下
String key = UUID.randomUUID().toString().replaceAll("-","")+
file.getOriginalFilename();
String dateUrl = new DateTime().toString("yyyy/MM/dd");
key = dateUrl+"/"+key;
ObjectMetadata objectMetadata = new ObjectMetadata();
PutObjectRequest putObjectRequest =
new PutObjectRequest(bucketName, key, inputStream,objectMetadata);
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
System.out.println(JSON.toJSONString(putObjectResult));
//https://ggkt-atguigu-1310644373.cos.ap-beijing.myqcloud.com/01.jpg
String url = "https://"+bucketName+"."+"cos"+"."+"你的的地域"+".myqcloud.com"+"/"+key;
return url;
} catch (Exception clientException) {
clientException.printStackTrace();
return null;
}
}
5.统一返回结果类Result
package com.atguigu.ggkt.result;
import lombok.Data;
//统一返回结果类
@Data
public class Result<T> {
private Integer code; //状态码
private String message; //返回状态信息(成功 失败)
private T data; //返回数据
public Result() {}
//成功的方法,没有data数据
// public static<T> Result<T> ok() {
// Result<T> result = new Result<>();
// result.setCode(200);
// result.setMessage("成功");
// return result;
// }
//失败的方法,没有data数据
// public static<T> Result<T> fail() {
// Result<T> result = new Result<>();
// result.setCode(201);
// result.setMessage("失败");
// return result;
// }
//成功的方法,有data数据
public static<T> Result<T> ok(T data) {
Result<T> result = new Result<>();
if(data != null) {
result.setData(data);
}
result.setCode(20000);
result.setMessage("成功");
return result;
}
//失败的方法,有data数据
public static<T> Result<T> fail(T data) {
Result<T> result = new Result<>();
if(data != null) {
result.setData(data);
}
result.setCode(20001);
result.setMessage("失败");
return result;
}
public Result<T> message(String msg){
this.setMessage(msg);
return this;
}
public Result<T> code(Integer code){
this.setCode(code);
return this;
}
}
6.FileUploadController
@Api(tags = "文件上传接口")
@RestController
@RequestMapping("file")
@CrossOrigin
public class FileUploadController {
@Autowired
private FileService fileService;
/**
* 文件上传
*/
@ApiOperation(value = "文件上传")
@PostMapping("upload")
public Result upload(MultipartFile file) {
String uploadUrl = fileService.upload(file);
return Result.ok(uploadUrl).message("文件上传成功");
}
}