一、开通COS对象存储
二、创建存储桶
基本信息
- 所属地域:请选择与您业务(或用户数量)相对集中的物理区域所对应的 COS 地域,设置后不可修改。地域的更多信息请参见 地域和访问域名。
- 名称:请输入自定义的存储桶名称。设置后不可修改。命名说明请参见存储桶的 命名规范。
- 访问权限:存储桶默认提供三种访问权限:私有读写、公有读私有写和公有读写,设置后仍可修改。详细信息请参见 存储桶访问权限。
- 请求域名:自动生成。创建完存储桶后,您可以使用该域名对存储桶进行访问。
- 版本控制:开启后,上传的同名对象将保存历史版本。
- 日志存储:为您记录跟存储桶操作相关的各种请求日志。
- 存储桶标签:存储桶标签作为管理存储桶的一个标识,您可以为存储桶设置标签,便于分组管理存储桶,详情请参见 设置存储桶标签。
- 服务端加密:目前存储桶的加密方式支持 SSE-COS 加密(即由 COS 托管密钥的服务端加密)。关于服务端加密的介绍,请参见 服务端加密概述。
对存储桶的配置信息进行确认。如需修改,单击上一步即可。
三、获取秘钥
1.创建子账号
四、将COS整合到spring Boot项目中
1.导入依赖
<dependency><groupId>com.qcloud</groupId><artifactId>cos_api</artifactId><version>5.6.89</version>
</dependency>
2.导入配置信息可放入yml文件中,使用工具类读取(相对安全)
tencent:cos:#腾讯云对象存储参数#腾讯云账户secretId,secretKeysecretId: secretKey: #存储桶名称buckerName: #地域region: ap-shanghai#请求域名(使用对应的存储桶和对应的地域)url:
3.工具类
@Component
public class ConstantCosUtils implements InitializingBean {@Value("${tencent.cos.secretId}")public String secretId;@Value("${tencent.cos.secretKey}")public String secretKey;@Value("${tencent.cos.buckerName}")public String buckerName;@Value("${tencent.cos.region}")public String region;@Value("${tencent.cos.url}")public String url;public static String SECRET_ID;public static String SECRET_KEY;public static String BUCKET_NAME;public static String REGION;public static String URL;@Overridepublic void afterPropertiesSet() throws Exception {SECRET_ID = secretId;SECRET_KEY = secretKey;BUCKET_NAME = buckerName;REGION = region;URL = url;}
}
4.编写代码
controller
/*** 上传商家logo* @return*/@ApiOperation("上传商家logo")@PostMapping("/upload")public R upload(MultipartFile file) {String url = settingReceiptCustomService.upload(file);return R.ok(url);}
serviceImpl
@Service
public class SettingReceiptCustomServiceImpl extends ServiceImpl<SettingReceiptCustomMapper, SettingReceiptCustom> implements SettingReceiptCustomService {@Overridepublic String upload(MultipartFile file) {COSClient cosClient = initCos();try {String filename = file.getOriginalFilename();InputStream inputStream = file.getInputStream();String filePath = getFilePath(filename);// 上传文件cosClient.putObject(new PutObjectRequest(ConstantCosUtils.BUCKET_NAME, filePath, inputStream, null));cosClient.setBucketAcl(ConstantCosUtils.BUCKET_NAME, CannedAccessControlList.PublicRead);return ConstantCosUtils.URL + "/" + filePath;} catch (Exception e) {e.printStackTrace();} finally {cosClient.shutdown();}return null;}private String getFilePath(String fileName){String filePath = "logo/";String fileType = fileName.substring(fileName.lastIndexOf("."));filePath += IdUtils.randomUUID() + fileType;return filePath;}/*** 初始化COSClient* @return*/private COSClient initCos(){// 1 初始化用户身份信息(secretId, secretKey)BasicCOSCredentials credentials = new BasicCOSCredentials(ConstantCosUtils.SECRET_ID, ConstantCosUtils.SECRET_KEY);// 2 设置 bucket 的区域, COS 地域的简称请参照Region region = new Region(ConstantCosUtils.REGION);ClientConfig clientConfig = new ClientConfig(region);// 从 5.6.54 版本开始,默认使用了 https
// clientConfig.setHttpProtocol(HttpProtocol.https);// 3 生成 cos 客户端。return new COSClient(credentials, clientConfig);}
}