packagecom.custome;importcom.qcloud.cos.COSClient;importcom.qcloud.cos.ClientConfig;importcom.qcloud.cos.auth.BasicCOSCredentials;importcom.qcloud.cos.auth.COSCredentials;importcom.qcloud.cos.model.ObjectMetadata;importcom.qcloud.cos.model.PutObjectResult;importcom.qcloud.cos.region.Region;importorg.springframework.web.multipart.MultipartFile;import java.io.*;importjava.net.URL;importjava.util.Date;importjava.util.Random;public classCOSClientUtil {//todo 这些变量信息自行到 腾讯云对象存储控制台 获取
privateCOSClient cOSClient;private static final String ENDPOINT = "test.com"; //用户可以指定域名,不指定则为默认生成的域名//secretId
private static final String secretId = "AKIDCJ";//secretKey
private static final String secretKey = "CD7";//存储通名称
private static final String bucketName = "test";//公有读私有写//1 初始化用户身份信息(secretId, secretKey)
private static COSCredentials cred = newBasicCOSCredentials(secretId, secretKey);//2 设置bucket的区域, COS地域的简称请参照https://cloud.tencent.com/document/product/436/6224
private static ClientConfig clientConfig = new ClientConfig(new Region("ap-beijing-1"));//3 生成cos客户端
private static COSClient cosclient = newCOSClient(cred, clientConfig);publicCOSClientUtil() {
cOSClient= newCOSClient(cred, clientConfig);
}/*** 销毁*/
public voiddestory() {
cOSClient.shutdown();
}/*** 上传图片
*
*@paramurl*/
public void uploadImg2Cos(String url) throwsException {
File fileOnServer= newFile(url);
FileInputStream fin;try{
fin= newFileInputStream(fileOnServer);
String[] split= url.split("/");this.uploadFile2Cos(fin, split[split.length - 1]);
}catch(FileNotFoundException e) {throw new Exception("图片上传失败");
}
}public String uploadFile2Cos(MultipartFile file) throwsException {if (file.getSize() > 10 * 1024 * 1024) {throw new Exception("上传图片大小不能超过10M!");
}//图片名称
String originalFilename =file.getOriginalFilename();
System.out.println("originalFilename = " +originalFilename);//图片后缀
String substring = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
System.out.println("substring = " +substring);
Random random= newRandom();//生成新的图片名称(随机数0-9999+系统当前时间+上传图片名)
String name = random.nextInt(10000) + System.currentTimeMillis() + "_" +substring;try{
InputStream inputStream=file.getInputStream();this.uploadFile2Cos(inputStream, name);returnname;
}catch(Exception e) {throw new Exception("图片上传失败");
}
}/*** 获得图片路径
*
*@paramfileUrl
*@return
*/
publicString getImgUrl(String fileUrl) {returngetUrl(fileUrl);
}/*** 获得url链接
*
*@paramkey
*@return
*/
publicString getUrl(String key) {//设置URL过期时间为10年 3600l* 1000*24*365*10
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);//生成URL
URL url =cOSClient.generatePresignedUrl(bucketName, key, expiration);if (url != null) {returnurl.toString();
}return null;
}/*** 上传到COS服务器 如果同名文件会覆盖服务器上的
*
*@paraminstream
* 文件流
*@paramfileName
* 文件名称 包括后缀名
*@return出错返回"" ,唯一MD5数字签名*/
publicString uploadFile2Cos(InputStream instream, String fileName) {
String ret= "";try{//创建上传Object的Metadata
ObjectMetadata objectMetadata = newObjectMetadata();
objectMetadata.setContentLength(instream.available());
objectMetadata.setCacheControl("no-cache");
objectMetadata.setHeader("Pragma", "no-cache");
objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf("."))));
objectMetadata.setContentDisposition("inline;filename=" +fileName);//上传文件
PutObjectResult putResult =cOSClient.putObject(bucketName, fileName, instream, objectMetadata);
ret=putResult.getETag();
}catch(IOException e) {
e.printStackTrace();
}finally{try{if (instream != null) {
instream.close();
}
}catch(IOException e) {
e.printStackTrace();
}
}returnret;
}/*** Description: 判断Cos服务文件上传时文件的contentType
*
*@paramfilenameExtension 文件后缀
*@returnString*/
public staticString getcontentType(String filenameExtension) {if (filenameExtension.equalsIgnoreCase("bmp")) {return "image/bmp";
}if (filenameExtension.equalsIgnoreCase("gif")) {return "image/gif";
}if (filenameExtension.equalsIgnoreCase("jpeg") || filenameExtension.equalsIgnoreCase("jpg")|| filenameExtension.equalsIgnoreCase("png")) {return "image/jpeg";
}if (filenameExtension.equalsIgnoreCase("html")) {return "text/html";
}if (filenameExtension.equalsIgnoreCase("txt")) {return "text/plain";
}if (filenameExtension.equalsIgnoreCase("vsd")) {return "application/vnd.visio";
}if (filenameExtension.equalsIgnoreCase("pptx") || filenameExtension.equalsIgnoreCase("ppt")) {return "application/vnd.ms-powerpoint";
}if (filenameExtension.equalsIgnoreCase("docx") || filenameExtension.equalsIgnoreCase("doc")) {return "application/msword";
}if (filenameExtension.equalsIgnoreCase("xml")) {return "text/xml";
}return "image/jpeg";
}
}