操作场景
对象文件的直接url地址可用于匿名用户直接下载对象文件,或程序代码中直接调用下载对象文件。
当用户需要获取某桶内某个对象文件的直接url地址时,可以通过如下两种方式解决:
- 通过控制台页面获取:详情请见通过URL访问对象。
- 本地通过代码获取:无需通过控制台,在本地通过代码获取对象文件的直接url地址的方法,请见本文后续介绍。
前提条件
- 用户已有对象文件上传至对象存储,已知该资源池对象存储服务的Endpoint域名,该对象文件所在的桶名称(bucketName)和对象键(key)。
- 对象键(key)为该对象文件的所有目录层级与文件名称加斜杠(/)后拼接而成。如一个对象文件在桶内的所有目录层级为“aaa/bbb”,文件名称为ccc.txt,该对象文件的对象键(key)是“aaa/bbb/ccc.txt”。
注意如果需要通过该url地址实现匿名用户直接下载,对象文件的权限需要改为“公共读”。
代码样例
- 对象文件的公网下载地址为:公网Endpoint/桶名称/对象键(包含所有的目录层级)
- 对象文件的内网下载地址为:内网Endpoint/桶名称/对象键(包含所有的目录层级)
例如:华东1资源池对象存储服务的Endpoint域名为https://jiangsu-10.zos.ctyun.cn,桶名为buckettest001,包含所有目录层级的对象名为aaa/bbb/ccc.txt,则该对象的公网下载地址:https://jiangsu-10.zos.ctyun.cn/buckettest001/aaa/bbb/ccc.txt
根据上述原理,我们提供Java、Python、C++、Bash的代码样例如下,代码中的url参数就是用户所需的对象文件的直接url地址:
JAVA
import java.net.URI;
import java.net.URISyntaxException;
public class urlJoint {
public static void main(String[] args) {
String serviceEndpoint = "https://jiangsu-10.zos.ctyun.cn";
String bucketName = "bucket";
String key = "aaa/bbb.txt"; //包含目录层级和文件名
try {
URI uri = new URI(serviceEndpoint + "/" + bucketName + "/" + key);
String url = uri.toString();//该参数为对象文件的直接url地址
//System.out.println(url);//打印URL地址,如不需要打印,可删除
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
Python
from urllib.parse import urljoin
endpoint_url = "https://jiangsu-10.zos.ctyun.cn"
Bucket = "bucket"
Key = "aaa/bbb.txt" #包含目录层级和文件名
url = urljoin(endpoint_url, f"{Bucket}/{Key}")#该参数为对象文件的直接url地址
#print(url)#打印URL地址,如不需要打印,可删除
C++
#include <iostream>
#include <string>
int main() {
std::string endpointUrl = "https://jiangsu-10.zos.ctyun.cn";
std::string bucketName = "bucket";
std::string keyName = "aaa/bbb.txt"; //包含目录层级和文件名
std::string url = endpointUrl + "/" + bucketName + "/" + keyName;//该参数为对象文件的直接url地址
//std::cout << url << std::endl;//打印URL地址,如不需要打印,可删除
return 0;
}
Bash
#!/bin/bash
endpoint_url="https://jiangsu-10.zos.ctyun.cn"
bucket="bucket"
#包含目录层级和文件名
key="aaa/bbb.txt"
#该参数为对象文件的直接url地址
url="${endpoint_url}/${bucket}/${key}"
#打印URL地址,如不需要打印,可删除
#echo "$url"