事件原由:腾讯默认域名不支持图片预览,只支持下载
为保证整体服务的安全性和稳定性,2024年1月1日后创建的存储桶,若使用 COS 默认域名访问对象,任意类型文件不支持预览,apk/ipa 类型文件不支持下载。详情可参考 COS 存储桶域名使用安全管理通知。
第一步:域名注册与备案
首先,用户需要准备一个已备案的自定义域名。
域名注册:您如果没有自定义域名,可前往 域名注册 购买域名。
域名备案:如果您的自定义域名用于配置到中国大陆地域的存储桶,则必须经过备案。备案流程可参考文档 首次备案操作指引(PC端)、首次备案操作指引(小程序端)。
第二步:为存储桶配置自定义域名
1. 准备好自定义域名后, 登录 对象存储控制台,进入存储桶列表,选择您需要配置的存储桶。
2. 进入存储桶详情页面,选择域名与传输管理 > 自定义源站域名。
3. 单击添加域名,配置域名信息:
域名:输入准备好的自定义域名。
源站类型:分为以下几种。
默认源站:如果您希望将自定义域名用作默认源站,请选择默认源站。
静态网站源站:如果您希望将自定义域名用作静态网站,请先为存储桶开启静态网站功能,然后选择静态网站源站。
全球加速源站:如果您希望将自定义域名用作全球加速,请先为存储桶开启全球加速功能,然后选择全球加速源站。
注意:
添加、上线或下线域名操作,非立即生效。实际配置需要一定时间,一般在30分钟后生效,以您域名的实际访问状态为准。
4. 配置 HTTPS 证书。如果需要使用 HTTPS 协议访问,需要为自定义域名配置证书。
如果您需要使用自有证书,需要将证书内容和私钥内容粘贴到指定输入框。
如果您使用的是腾讯云申请的证书,可直接在弹窗中选择当前账号下已有的腾讯云证书。
5. 自定义域名配置完成后,记录 CNAME 一栏的信息(例如 bucket-1250000000.cos.ap-beijing.myqcloud.com),用于后续配置域名解析。
第三步:配置域名解析
腾讯云域名
如果域名 DNS 厂商是腾讯云,可以前往 云解析 DNS 控制台,为您的自定义域名配置 CNAME 解析记录。主要配置项如下:
主机记录:填写子域名。例如,添加 www.123.com
的解析,您在 “主机记录” 处选择 “www” 即可。如果只是想添加 123.com
的解析,您在 “主机记录” 处选择 “@” 即可。“@” 的 CNAME 会影响到 MX 记录的正常解析,添加时请您慎重考虑。
记录类型:选择 “CNAME”。
线路类型:选择 “默认” 类型,否则会导致部分用户无法解析。
记录值:CNAME 指向的域名,只可以填写域名。例如 bucket-1250000000.cos.ap-beijing.myqcloud.com。
具体操作指引请参见 CNAME 记录。
验证解析是否生效
解析记录需要一定时间生效,可以通过 dig 命令或 对象存储控制台 查看解析是否成功更生效。验证方法如下:
在命令行窗口输入命令:dig mydomain.com
,查看 CNAME 记录是否正确生效。(使用时请将mydomain.com
替换为自定义域名)
这些相关配置可以参见腾讯api文档:对象存储 存储桶切换自定义域名-实践教程-文档中心-腾讯云 (tencent.com)
配置完成后,如何修改上传图片后,获取url地址的相关配置,具体代码如下:
// 1 初始化用户身份信息(secretId, secretKey)
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
// 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
ClientConfig clientConfig = new ClientConfig(new Region(cosRegion));
clientConfig.setHttpProtocol(HttpProtocol.https);
//设置自定义域名
//get service请求会使用这个域名,这个域名不能自定义
// String serviceApiEndPoint = "cos.ap-nanjing.myqcloud.com";
String serviceApiEndPoint = "service.cos.myqcloud.com";
String userEndpoint = "file.test.com"; //这个就是上面配置的自定义的域名
UserSpecifiedEndpointBuilder endpointBuilder = new UserSpecifiedEndpointBuilder(userEndpoint, serviceApiEndPoint);
clientConfig.setEndpointBuilder(endpointBuilder);
// 3 生成cos客户端
COSClient cosclient = new COSClient(cred, clientConfig);
HttpMethodName methodName = HttpMethodName.GET;
//key是上传文件的key,expireDate是过期时间
URL url = cosClient.generatePresignedUrl(bucketName, key, expireDate, methodName);
return url.toString();
这样返回的url就可以浏览了