手把手带你的文件上腾讯云的存储
首先没有接触过上传图片,文件等到云端。
如果现在只是报:please make sure bucket name must contain legal appid when appid is missing. example: music-12511223
直接下反看到文章的后半部分 有解决方法。
第一步:登录腾讯云。
**进入后:如果没有购买的就先买一下1块钱很便宜。
买完后,我们进行创建一个存储桶
完成后我们就获取到了所有的需要上传文件的信息了:
secretId, secretKey(上图最后一步会生成这两个)
region(地域的地址)例:ap-shanghai
bucketName(最初设置的存储桶名称)例:
到这里了就到后端代码超级简介让你看懂上传:
本地建一个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>