引入Maven依赖
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>5.6.175</version>
</dependency>
在springboot配置文件配置关键信息
#乱编的参数
tencent:
url: https://${bucket-name}.cos.${region}.myqcloud.com
access-key-id: AKRF12dWX2NBtRtFEMt19mIhw44RFObM0V1X
access-key-secret: Y5Y4dAzutAEFfeOE911cFDMHA4qdIrFW4avH
bucket-name: midawdkerfvuse-7212386212
region: ap-guangzhou
新建Properties类获取配置文件信息
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "tencent")
@Data
public class TencentCosProperties {
private String url;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
private String region;
}
新建TencentCosUtil类封装文件上传方法
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.http.HttpProtocol;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.region.Region;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.UUID;
@Data
@AllArgsConstructor
@Slf4j
public class TencentCosUtil {
private String url;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
private String region;
/**
*
* @param file 文件byte数组
* @return filepath 文件访问url
*/
public String upload(MultipartFile file) throws IOException {
//由文件原始名和UUID构成新文件名
String originalFilename = file.getOriginalFilename();
String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
String objectName = UUID.randomUUID().toString() + extension;
byte[] bytes = file.getBytes();
// 创建OSSClient实例。
COSCredentials cred = new BasicCOSCredentials(accessKeyId, accessKeySecret);
Region r = new Region(region);
ClientConfig clientConfig = new ClientConfig(r);
clientConfig.setHttpProtocol(HttpProtocol.https);
COSClient cosClient = new COSClient(cred, clientConfig);
String folder = "wx_blog/";//存储桶文件夹名称
String key = folder + objectName;
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("image/png");
metadata.setContentType("image/jpeg");
ByteArrayInputStream byteArrayInputStream =
new ByteArrayInputStream(bytes);
metadata.setContentLength(byteArrayInputStream.available());
PutObjectRequest putObjectRequest =
new PutObjectRequest(bucketName, key, byteArrayInputStream, metadata);
PutObjectResult putObjectResult =
cosClient.putObject(putObjectRequest);
StringBuilder stringBuilder = new StringBuilder("");
stringBuilder
.append(url)
.append("/")
.append(key);
log.info("文件url:{}", stringBuilder.toString());
cosClient.shutdown();
return stringBuilder.toString();
}
}
新建配置类注入
@Configuration
@Slf4j
public class CosConfiguration {
@Bean
@ConditionalOnMissingBean
public TencentCosUtil tencentCosUtil(TencentCosProperties properties){
return new TencentCosUtil(
properties.getEndpoint(),
properties.getAccessKeyId(),
properties.getAccessKeySecret(),
properties.getBucketName());
}
}
业务代码使用举例
@RestController
public class uploadController {
@Autowired
private TencentCosUtil tencentCosUtil;
@PostMapping("/upload")
public Result<String> upload(MultipartFile img) throws IOException {
return Result.success(tencentCosUtil.upload(img));
}
}