--------------------
个人博客上已经同步更新了文章,有目录索引,阅读起来比较方便,欢迎大家移步个人博客上读阅~
个人博客地址:[http://zwd596257180.gitee.io/blog/2019/06/11/tengxunyuncos/][http_zwd596257180.gitee.io_blog_2019_06_11_tengxunyuncos]
--------------------
![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaWRvbmdfeQ_size_16_color_FFFFFF_t_70]
# 一、jar 包 #
org.apache.clerezza.ext
org.json.simple
0.4
commons-fileupload
commons-fileupload
1.3.2
com.qcloud
cos_api
5.2.4
# 二、自定义工具类 COSConfig.java #
该工具类是用来存放申请到的腾讯云对象存储COS的相关信息,关于这些信息如何获取请看博客后面第七点。
package com.utils;
//腾讯云COS对象存储常量
public class COSConfig {
//secretId
public static final String SECRETID = "AKIDfO0Zz*************************";
//secretKey
public static final String SECRETKEY = "b1Jzp9Y****************************";
//bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
public static final String REGION = "ap-guangzhou";
// bucket名需包含appid
public static final String BUCKETNAME = "hstc-image-125********";
}
# 三、自定义工具类 DateConvent.java #
DateConvent.java 是自己写的一个类型转换工具类。
package com.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
//转换时间的工具类
public class DateConvert {
public String toString(Date date) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String time = simpleDateFormat.format(date);
return time;
}
}
# 四、图片上传和删除工具类 ImageHandle.java #
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.exception.CosClientException;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.exception.MultiObjectDeleteException;
import com.qcloud.cos.model.*;
import com.qcloud.cos.region.Region;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
public class ImageHandle {
private static final Logger logger = LoggerFactory.getLogger(ImageHandle.class);
/** * 上传图片 * @param file * @return * @throws IOException */
public static String uploadImageToCos(MultipartFile file) throws IOException {
if (file != null) {
// 获取文件内容类型
String contentType = file.getContentType();
// 获取上传文件的文件流
InputStream inputStream = file.getInputStream();
// 获取文件的字节数
long size = file.getSize();
// 判断文件是否为空
if (size != 0) {
// 初始化用户身份信息(secretId, secretKey)
// secretId,secretKey 是腾讯 COS 的一个账号和密码
COSCredentials cred = new BasicCOSCredentials(COSConfig.SECRETID, COSConfig.SECRETKEY);
// 设置bucket的区域, COS地域的简称,请参照:
// https://www.qcloud.com/document/product/436/6224
ClientConfig clientConfig = new ClientConfig(new Region(COSConfig.REGION));
// 生成cos客户端
COSClient cosclient = new COSClient(cred, clientConfig);
// bucket名需包含appid
String bucketName = COSConfig.BUCKETNAME;
//获取后缀名
String[] split = contentType.split("/");
//文件名
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
//当前日期
Date date = new Date();
DateConvert util = new DateConvert();
String dd = util.toString(date);
//目标文件名
String key = "/hanshi" + "/" + dd + "/" + uuid + "." + split[1];
String imgName = key.substring(1);
ObjectMetadata objectMetadata = new ObjectMetadata();
// 从输入流上传必须制定content length
// 否则http客户端可能会缓存所有数据,存在内存OOM的情况
objectMetadata.setContentLength(size);
// 默认下载时根据cos路径key的后缀返回响应的contenttype
// 上传时设置contenttype会覆盖默认值
objectMetadata.setContentType(contentType);
PutObjectRequest putObjectRequest =
new PutObjectRequest(bucketName, key, inputStream, objectMetadata);
// 设置存储类型, 默认是标准(Standard), 低频(standard_ia), 近线(nearline)
putObjectRequest.setStorageClass(StorageClass.Standard);
try {
//将图片上传到 COS
cosclient.putObject(putObjectRequest);
} catch (CosServiceException e) {
e.printStackTrace();
} catch (CosClientException e) {
e.printStackTrace();
}
// 关闭客户端
cosclient.shutdown();
// 返回的只是图片在COS中存储的路径,在线返回COS的链接需要自己拼接上
//比如:"https://hstc-image-1254334144.cos.ap-guangzhou.myqcloud.com/"+imgName
return imgName;
}
}
return "";
}
/** * 删除图片(不带版本号, 即bucket未开启多版本) * @param imgName * @return */
public static Boolean deleteImageFromCos(String imgName){
// 初始化用户身份信息(secretId, secretKey)
COSCredentials cred = new BasicCOSCredentials(COSConfig.SECRETID, COSConfig.SECRETKEY);
// 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
ClientConfig clientConfig = new ClientConfig(new Region(COSConfig.REGION));
// 生成cos客户端
COSClient cosclient = new COSClient(cred, clientConfig);
// bucket名需包含appid
String bucketName = COSConfig.BUCKETNAME;
DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName);
// 设置要删除的key列表, 最多一次删除1000个
ArrayList keyList = new ArrayList<>();
// 传入要删除的文件名
keyList.add(new DeleteObjectsRequest.KeyVersion(imgName));
//============================================
//如果一次性删除多张图片的话,可以把传入的参数改为 List,再循环赋值给 keyList
//keyList.add(new KeyVersion("2018-04-19/99440ec2800e4a3baef9e84c662a546d.plain"));
//keyList.add(new KeyVersion("2018-04-18/4b566aef3b5d4b28bd12d6e32a72dad9.jpeg"));
//keyList.add(new KeyVersion("2018-04-18/tttt"));
//============================================
deleteObjectsRequest.setKeys(keyList);
// 批量删除文件
try {
DeleteObjectsResult deleteObjectsResult = cosclient.deleteObjects(deleteObjectsRequest);
List deleteObjectResultArray = deleteObjectsResult.getDeletedObjects();
} catch (MultiObjectDeleteException mde) { // 如果部分产出成功部分失败,
// 返回MultiObjectDeleteException
List deleteObjects = mde.getDeletedObjects();
List deleteErrors = mde.getErrors();
// 关闭客户端
cosclient.shutdown();
return false;
} catch (CosServiceException e) { // 如果是其他错误, 比如参数错误,
// 身份验证不过等会抛出CosServiceException
logger.error("参数错误");
e.printStackTrace();
// 关闭客户端
cosclient.shutdown();
return false;
} catch (CosClientException e) { // 如果是客户端错误,比如连接不上COS
logger.error("客户端错误,比如连接不上COS");
e.printStackTrace();
// 关闭客户端
cosclient.shutdown();
return false;
}
// 关闭客户端
cosclient.shutdown();
return true;
}
}
# 五、Controller 编程 #
上面已经把图片上传和删除分别封装成一个静态方法,所以只需要直接调用即可。
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
@RequestMapping(value = "/insertrecruitmentinfo")
@ResponseBody
public String add(MultipartFile file,HttpServletRequest request) throws IOException {
/*前端 UI 的 form 表单里面有用到图片上传的时候,需要在这里对 request 作以下处理*/
// MultipartHttpServletRequest mulRequest = (MultipartHttpServletRequest) request;
// String title = mulRequest.getParameter("title");//获取标题
// ... ...
//判空
if( file != null ){
//将图片上传成功后的返回链接返回
String litimg = ImageHandle.uploadImageToCos(file);
... ...
}
}
# 六、前端编程 #
后台 controller 使用 MultipartFile 接收文件,需要在 form 表单加上这个属性:enctype=“multipart/form-data”。
... ...
... ...
# 七、创建腾讯云COS #
1、进入自己腾讯云服务器的控制台,打开对象存储。
![在这里插入图片描述][20180915133256644.png]
2、创建存储桶
![在这里插入图片描述][20180915133437573.png]
3、填写存储桶相关信息
![在这里插入图片描述][2018091513362461.png]
4、查看基本配置
![在这里插入图片描述][20180915134604425.png]
5、SECRETID 和 SECRETKEY 的获取
[https://console.qcloud.com/cam/capi][https_console.qcloud.com_cam_capi]
打开上面的链接,登录进去,就能找到了,如下图:
如果第一次没有,就自己新建一个密钥。
![在这里插入图片描述][20180915134745118.png]
# 八、批量上传图片 #
下面只是一个大概的逻辑代码,可根据自己需要修改。同时也需要配合前面的单张图片上传使用。
public void uploadPictureList1(MultipartFile[] file){
List list = null;
int code=1;
if (file!=null && file.length>0) {
try {
list = new ArrayList ();
for (int i = 0; i < file.length; i++) {
// 通过循环获取单张图片 file[i] ,然后一张一张上传
String upload = uploadImageToCos(file[i]);
list.add(upload);
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 将上传后所有图片链接拼接起来,用逗号分开
String imgName ="";
int index = 0;
for(String str : list) {
if(index != 0 ) {
imgName += ",";
}
imgName += str;
index++;
}
}
[http_zwd596257180.gitee.io_blog_2019_06_11_tengxunyuncos]: http://zwd596257180.gitee.io/blog/2019/06/11/tengxunyuncos/
[watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaWRvbmdfeQ_size_16_color_FFFFFF_t_70]: /images/20210626/3eb917467f7e4edab0214deb618f8b39.png
[20180915133256644.png]: http://zwd.yyzheng.cn/20180915133256644.png
[20180915133437573.png]: http://zwd.yyzheng.cn/20180915133437573.png
[2018091513362461.png]: http://zwd.yyzheng.cn/2018091513362461.png
[20180915134604425.png]: http://zwd.yyzheng.cn/20180915134604425.png
[https_console.qcloud.com_cam_capi]: https://console.qcloud.com/cam/capi
[20180915134745118.png]: http://zwd.yyzheng.cn/20180915134745118.png