腾讯云服务器怎么搭建ssm项目,SSM 项目如何上传图片到腾讯云COS?

--------------------

个人博客上已经同步更新了文章,有目录索引,阅读起来比较方便,欢迎大家移步个人博客上读阅~

个人博客地址:[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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值