欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

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

不要慌需要设置

腾讯云上传图片COS
腾讯云上传图片COS
腾讯云上传图片COS