手把手带你的文件上腾讯云的存储

首先没有接触过上传图片,文件等到云端。

如果现在只是报:please make sure bucket name must contain legal appid when appid is missing. example: music-12511223
直接下反看到文章的后半部分
有解决方法。

第一步:登录腾讯云。

本地文件导入Hadoop 本地文件导入腾讯文档_上传文件

**进入后:如果没有购买的就先买一下1块钱很便宜。

买完后,我们进行创建一个存储桶

本地文件导入Hadoop 本地文件导入腾讯文档_上传文件_02


本地文件导入Hadoop 本地文件导入腾讯文档_上传文件_03


本地文件导入Hadoop 本地文件导入腾讯文档_本地文件导入Hadoop_04


本地文件导入Hadoop 本地文件导入腾讯文档_本地文件导入Hadoop_05


本地文件导入Hadoop 本地文件导入腾讯文档_本地文件导入Hadoop_06


本地文件导入Hadoop 本地文件导入腾讯文档_正则表达式_07


本地文件导入Hadoop 本地文件导入腾讯文档_本地文件导入Hadoop_08

完成后我们就获取到了所有的需要上传文件的信息了:

secretId, secretKey(上图最后一步会生成这两个)

region(地域的地址)例:ap-shanghai

点击查看自己的地域地址链接

bucketName(最初设置的存储桶名称)例:

本地文件导入Hadoop 本地文件导入腾讯文档_本地文件导入Hadoop_09

到这里了就到后端代码超级简介让你看懂上传:

本地建一个maven项目pom里面加入

先埋一个坑,自己走过以后才会记得:
<dependency>
      <groupId>com.qcloud</groupId>
      <artifactId>cos_api</artifactId>
      <version>5.2.4</version>
</dependency>

java下建一个类,来跑

import com.qcloud.cos.*;
import com.qcloud.cos.auth.*;
import com.qcloud.cos.exception.*;
import com.qcloud.cos.model.*;
import com.qcloud.cos.region.Region;
import java.io.File;

public class CosClientTest {

    private static final String SECRET_ID = "AKIDXrBE1WEmcCVYJoo2kDQpyvQebJkcjVW2";
    private static final String SECRET_KEY = "oRntkLgkZWDeonWzCE4jRs3xkJbcgJho";
    private static final String BUCKETNAME = "zyl-1301113698";
    private static final String REGIONID = "ap-shanghai";
    private static final String KEY="C:\\Users\\My\\Desktop\\image\\1.jpg";
    /**
     * 初始化CosClient相关配置, appid、accessKey、secretKey、region
     * @return
     */
    public static COSClient getCosClient() {
        // 1 初始化用户身份信息(secretId, secretKey)
        COSCredentials cred = new BasicCOSCredentials(SECRET_ID, SECRET_KEY);
        // 2 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
        // clientConfig中包含了设置region, https(默认http), 超时, 代理等set方法, 使用可参见源码或者接口文档FAQ中说明
        ClientConfig clientConfig = new ClientConfig(new Region(REGIONID));
        // 3 生成cos客户端
        COSClient cosClient = new COSClient(cred, clientConfig);
        // bucket的命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式
        //String bucketName = BUCKETNAME;
        return cosClient;
    }

    /**
     * 上传文件
     * @return
     * //绝对路径和相对路径都OK
     */
    public static String uploadFile() {
        //自己更改本地上传文件
        File localFile = new File("C:\\Users\\My\\Desktop\\image\\1.jpg");
        PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKETNAME, KEY, localFile);

        // 设置存储类型, 默认是标准(Standard), 低频(standard_ia),一般为标准的
        putObjectRequest.setStorageClass(StorageClass.Standard);

        COSClient cc = getCosClient();
        try {
            PutObjectResult putObjectResult = cc.putObject(putObjectRequest);
            // putobjectResult会返回文件的etag
            String etag = putObjectResult.getETag();
            System.out.println(etag);
        } catch (CosServiceException e) {
            e.printStackTrace();
        } catch (CosClientException e) {
            e.printStackTrace();
        }
        // 关闭客户端
        cc.shutdown();
        return null;
    }

    public static void main(String[] args) {
        getCosClient();
        uploadFile();
    }
}

跑到这里的话可能会出现一个错:

please make sure bucket name must contain legal appid when appid is missing. example: music-12511223

我们进到它报错的地方可以看到:

这是旧版本的格式化桶代码(formatBucket)
private String formatBucket(String bucketName, String appid) throws CosClientException {
        BucketNameUtils.validateBucketName(bucketName);
        String parrtern;
        if (appid == null) {
            parrtern = ".*-(125|100|20)[0-9]{3,}$";
            if (Pattern.matches(parrtern, bucketName)) {
                return bucketName;
            } else {
                throw new CosClientException("please make sure bucket name must contain legal appid when appid is missing. example: music-1251122334");
            }
        } else {
            parrtern = "-" + appid;
            return bucketName.endsWith(parrtern) ? bucketName : bucketName + parrtern;
        }
    }

其实提示的信息就是:当前的版本太低,正则表达式“-”后面是(125 100 20 )开头的,我们的appid是 130 开头的更换了新的版本后,正则表达式变了

把一开始的依赖换一下:
<dependency>
            <groupId>com.qcloud</groupId>
            <artifactId>cos_api</artifactId>
            <version>5.6.8</version>
        </dependency>