腾讯云上传图片COS
程序员文章站
2024-03-14 10:09:58
...
腾讯云上传COS
简介
腾讯云对象存储 COS 使用 XML API,这是一种轻量级的、无连接状态的接口,调用此接口您可以直接通过 HTTP/HTTPS 发出请求和接受响应,实现与腾讯云对象存储后台的交互操作。
由于使用了不同的数据传输框架,对象存储 COS 提供了独立于云 API 的接口和独立的 SDK,您可直接前往 COS 的 API 操作列表 了解详情,或前往 COS 的 SDK 列表 下载您需要的 SDK。云 API 的指南和对应的 SDK 不包含对象存储 COS 的操作功能。
术语信息
名称 | 描述 |
---|---|
APPID | 开发者访问 COS 服务时拥有的用户维度唯一资源标识,用以标识资源,可在 API **管理 页面获取 |
SecretId | 开发者拥有的项目身份识别 ID,用以身份认证,可在 API **管理 页面获取 |
SecretKey | 开发者拥有的项目身份**,可在 API **管理 页面获取 |
Bucket | 存储桶,COS 中用于存储数据的容器。有关存储桶的进一步说明,请参见 存储桶概述 文档 |
Object | 对象,COS 中存储的具体文件,是存储的基本实体 |
ObjectKey | 对象键,对象(Object)在存储桶(Bucket)中的唯一标识。有关对象与对象键的进一步说明,请参见 对象概述 文档 |
Region | 地域信息,枚举值可参见 对象概述 文档,例如:ap-beijing、ap-hongkong、eu-frankfurt 等 |
ACL | 访问控制列表(Access Control List),是指特定 Bucket 或 Object 的访问控制信息列表 |
CORS | 跨域资源共享(Cross-Origin Resource Sharing), 指发起请求的资源所在域不同于该请求所指向资源所在的域的 HTTP 请求 |
Multipart Uploads | 分块上传,腾讯云 COS 服务为上传文件提供的一种分块上传模式 |
快速入门
要使用腾讯云对象存储 API,需要先执行以下步骤:
-
在腾讯云 对象存储控制台 开通腾讯云对象存储(COS)服务。
-
在腾讯云 对象存储控制台 创建一个 Bucket。
-
在访问管理控制台中的 API **管理 页面里获取 APPID、SecretId、SecretKey 内容。
-
编写程序调用
一个简单得腾讯云上传 代码
第一步:导入依赖
<!-- 腾讯云cos图片上传开始 -->
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>5.6.18</version>
</dependency>
<!-- 腾讯云cos图片上传结束 -->
第二步:配置文件中application.properties添加 secretId,secretKey,bucket,bucketName,prefix
#腾讯云配置参数
#开发者拥有的项目身份识别 ID,用以身份认证
tengxun.cos.secretId= AKIDxOo*****************p
#开发者拥有的项目身份**
tengxun.cos.secretKey=SnBPR*****************3
#地域信息,枚举值可参见 对象概述 文档,例如:ap-beijing、ap-hongkong、eu-frankfurt 等
tengxun.cos.bucket=ap-****
#存储桶,COS 中用于存储数据的容器
tengxun.cos.bucketName= jin-********
#图片前缀
tengxun.cos.prefix=http://jin-*******************/
第三步: 接口返回值类型util 这个是自己写得一个接口返回值工具类
package com.upload.util;
import java.io.Serializable;
import java.util.HashMap;
/**
* 定义接口返回值结构
* @auther Lazy
* @create 2020/04/30
*/
public class ResData implements Serializable {
// 验证token 0 - token失效 1 - token正常
private int tokenCheck = 1;
// 接口返回值状态 0 - 失败 1 - 成功
private int status = 1;
// 接口返回值信息
private String information = "";
// 接口返回值
private Object data;
public static final String ERRORMSG = "恭喜你遇到bug!";
/**
* 设置成功信息
* @param information 提示消息
* @param object 返回数据
*/
public void setSuccess(String information,Object object){
this.tokenCheck = 1;
this.status = 1;
this.information = information;
this.data = object;
}
/**
* 设置失败信息
* @param information 提示消息
* @param object 返回数据
*/
public void setError(String information,Object object){
this.tokenCheck = 1;
this.status = 0;
this.information = information;
this.data = object;
}
/**
* 设置token失效信息
*/
public void setTokenFalse(){
this.tokenCheck = 0;
this.status = 0;
this.information = "token失效,请重新登陆!";
this.data = new HashMap<String,String>();
}
public int getTokenCheck() {
return tokenCheck;
}
public int getStatus() {
return status;
}
public String getInformation() {
return information;
}
public Object getData() {
return data;
}
}
最后一步:(重要)腾讯云COS图片上传类
package com.upload.controller;
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.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.region.Region;
import com.upload.util.ResData;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
/**
*
* 图片上传到服务器
*
* @auther Lazy
* @create 2020/04/30
*/
@CrossOrigin
@RestController
public class FileUpload {
//获取配置文件中得主要信息
@Value("${tengxun.cos.secretId}")
private String secretId;
@Value("${tengxun.cos.secretKey}")
private String secretKey;
@Value("${tengxun.cos.bucket}")
private String bucket;
@Value("${tengxun.cos.bucketName}")
private String bucketName;
@Value("${tengxun.cos.prefix}")
private String prefix;
/**
* 上传道腾讯云服务器
* API(https://cloud.tencent.com/document/product/436/10199)
* @return
*/
@PostMapping("/uploadFile")
public Object Upload(@RequestParam(value = "file") MultipartFile file, HttpSession session){
ResData resData = new ResData();
//判断文件是否为空
if(file == null){
resData.setError("文件为空!","error");
return resData;
}
//获取旧文件名称
String oldFileName = file.getOriginalFilename();
//旧文件名称后缀
String eName = oldFileName.substring(oldFileName.lastIndexOf("."));
//新的文件名称
String newFileName = UUID.randomUUID()+eName;
/*腾讯云上传开始*/
// 1 初始化用户身份信息(secretId, secretKey)
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
// 2 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
ClientConfig clientConfig = new ClientConfig(new Region(bucket));
// 3 生成cos客户端
COSClient cosclient = new COSClient(cred, clientConfig);
// bucket的命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式
String bucketName = this.bucketName;
// 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20 M 以下的文件使用该接口
// 大文件上传请参照 API 文档高级 API 上传
File localFile = null;
try {
localFile = File.createTempFile("temp",null);
file.transferTo(localFile);
// 指定要上传到 COS 上的路径
String key = "a/" + newFileName;
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);
resData.setSuccess("上传图片成功!",this.prefix + putObjectRequest.getKey());
} catch (IOException e) {
e.printStackTrace();
resData.setError(resData.ERRORMSG,e.getMessage());
}finally {
// 关闭客户端(关闭后台线程)
cosclient.shutdown();
}
return resData;
}
}
总结:
以上就是腾讯云COS上传的完整流程,如果上传成功之后图片不能访问 报如下错误