1.创建Util
我们将之前测试的test复制过来,
1.将方法里面的固定参数设置出来private
2.将方法里面的变化参数设置作为传入参数
3.返回String类型的URL地址
完整代码如下:
package org.huangyingyuan.utils;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.region.Region;
import java.io.File;
//这是关于提供上传文件到腾讯云对象存储的工具类
public class TengXunOssUtil {
//将参数不会变化的部分提取出来,作为常量(腾讯云的基本信息)
private static String secretId= "你的密钥ID"; // 秘钥 ID
private static String secretKey= "你的密钥"; // 密钥
private static String bucketName= "你的存储桶名称"; // 存储桶名称
//将参数会发生变化的部分提取出来,作为参数传入
/**
* 上传文件到腾讯云对象存储
* @param COS_PATH 上传到腾讯云的路径
* @param localFile 本地文件路径
*/
public static String uploadFile(String COS_PATH,InputStream localFile) throws Exception {
//初始化返回的url
String url = "";
// 1. 初始化用户身份信息
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
// 2. 设置 bucket 所在的区域
Region region = new Region("ap-guangzhou");
ClientConfig clientConfig = new ClientConfig(region);
// 3. 创建 COS 客户端
COSClient cosClient = new COSClient(cred, clientConfig);
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, COS_PATH, localFile);
cosClient.putObject(putObjectRequest);
System.out.println("上传成功!");
//上传成功后,返回url(URL的组成:https://bucketName.cos.region.myqcloud.com/path)
url = "https://" + bucketName + ".cos." + region.getRegionName() + ".myqcloud.com/" + COS_PATH;
// 5. 关闭客户端
cosClient.shutdown();
return url;
}
}
2.FileUploadController
package org.huangyingyuan.controller;
import org.huangyingyuan.pojo.Result;
import org.huangyingyuan.utils.TengXunOssUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;
@RestController
public class FileUploadController {
@PostMapping("/upload")
public Result<String> upload(MultipartFile file)throws IOException {
//把文件的名字存储到本地磁盘上
String originalFilename = file.getOriginalFilename();
//保证文件的名字是唯一的,从而防止文件覆盖(设置一个UUID作为文件名然后加上原文件名的后缀)【本地文件路径】
String fileName= UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));
// 创建临时文件(注意!这里创建临时文件是因为我在TengXunOssUtil中使用了OSS的SDK,而SDK要求上传的文件必须是本地文件)
File tempFile = new File(System.getProperty("java.io.tmpdir") + "/" + fileName);
// 将MultipartFile写入临时文件
try (FileOutputStream fos = new FileOutputStream(tempFile)) {
fos.write(file.getBytes());
}
// 使用临时文件进行上传
String url = TengXunOssUtil.uploadFile(fileName, tempFile);
// 删除临时文件
tempFile.delete();
return Result.success(url);
}
}
3.成功案例:

到这里我们就实现了通过腾讯云OSS去存储文件了