腾讯云上传图片COS

腾讯云上传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,需要先执行以下步骤:

  1. 在腾讯云 对象存储控制台 开通腾讯云对象存储(COS)服务。

  2. 在腾讯云 对象存储控制台 创建一个 Bucket。

  3. 在访问管理控制台中的 API 密钥管理 页面里获取 APPID、SecretId、SecretKey 内容。

  4. 编写程序调用

一个简单得腾讯云上传 代码

第一步:导入依赖

    <!-- 腾讯云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上传的完整流程,如果上传成功之后图片不能访问 报如下错误
错误报错

不要慌需要设置

第一步
第二张
第三张

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值