最近更新时间:2025-04-25 15:43:03
public void putObjectFromFile() {
// 初始化 Ks3Client,参见“初始化”文档
Ks3Client ks3Client = initKs3Client();
try {
// 初始化上传对象请求,设置 bucket,objectKey,文件
PutObjectRequest request = new PutObjectRequest("<your-bucket>", "<object-key>", new File("<path-of-your-file>"));
// 设置存储类型
request.setStorageClass(StorageClass.Standard);
// 设置 ACL
request.setCannedAcl(CannedAccessControlList.Private);
// 或者设置自定义权限
AccessControlList acl = new AccessControlList();
acl.addGrant(new GranteeId("<grantee-id>"), Permission.Read);
request.setAcl(acl);
// 设置标签
ObjectTagging objectTagging = new ObjectTagging();
objectTagging.addObjectTag("key1", "value1");
objectTagging.addObjectTag("key2", "value2");
request.setObjectTagging(objectTagging);
// 设置 metadata
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("text/plain");
metadata.setUserMeta("key1", "value1");
request.setObjectMeta(metadata);
// 设置 KS3 托管密钥的服务端加密
// metadata.setSseAlgorithm("AES256");
// 或者设置自定义密钥的服务端加密
// request.setSseCustomerKey(getCustomerKey());
// 设置是否禁止覆盖
request.setForbidOverwrite(true);
// 发起上传请求
PutObjectResult putObjectResult = ks3Client.putObject(request);
System.out.println("ETag: " + putObjectResult.geteTag());
System.out.println("Crc64Ecma: " + putObjectResult.getCrc64Ecma());
} catch (Ks3ServiceException e) {
System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
System.out.println("Error Message: " + e.getErrorMessage());
System.out.println("Error Code: " + e.getErrorCode());
System.out.println("Request ID: " + e.getRequestId());
} catch (Ks3ClientException e) {
System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
System.out.println("Error Message: " + e.getMessage());
} finally {
// 不再使用时,关闭 Ks3Client
ks3Client.shutdown();
}
}
上传字符串
以下代码用于将字符串上传到目标存储空间examplebucket中exampledir目录下的exampleobject.txt文件。
public void putObjectFromString() {
// 初始化 Ks3Client,参见“初始化”文档
Ks3Client ks3Client = initKs3Client();
try {
String content = "<your-string>";
// 将字符串转换为输入流
InputStream inputStream = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));
// 初始化上传对象请求,设置 bucket,objectKey,输入流
PutObjectRequest request = new PutObjectRequest("<your-bucket>", "<object-key>", inputStream);
// 设置存储类型
request.setStorageClass(StorageClass.Standard);
// 设置 ACL
request.setCannedAcl(CannedAccessControlList.Private);
// 或者设置自定义权限
AccessControlList acl = new AccessControlList();
acl.addGrant(new GranteeId("<grantee-id>"), Permission.Read);
request.setAcl(acl);
// 设置标签
ObjectTagging objectTagging = new ObjectTagging();
objectTagging.addObjectTag("key1", "value1");
objectTagging.addObjectTag("key2", "value2");
request.setObjectTagging(objectTagging);
// 设置 metadata
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("text/plain");
metadata.setUserMeta("key1", "value1");
request.setObjectMeta(metadata);
// 设置 KS3 托管密钥的服务端加密
// metadata.setSseAlgorithm("AES256");
// 或者设置自定义密钥的服务端加密
// request.setSseCustomerKey(getCustomerKey());
// 设置是否禁止覆盖
request.setForbidOverwrite(true);
// 发起上传请求
PutObjectResult putObjectResult = ks3Client.putObject(request);
System.out.println("ETag: " + putObjectResult.geteTag());
System.out.println("Crc64Ecma: " + putObjectResult.getCrc64Ecma());
} catch (Ks3ServiceException e) {
System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
System.out.println("Error Message: " + e.getErrorMessage());
System.out.println("Error Code: " + e.getErrorCode());
System.out.println("Request ID: " + e.getRequestId());
} catch (Ks3ClientException e) {
System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
System.out.println("Error Message: " + e.getMessage());
} finally {
// 不再使用时,关闭 Ks3Client
ks3Client.shutdown();
}
}
上传Byte数组
以下代码用于将Byte数组上传到目标存储空间examplebucket中exampledir目录下的exampleobject.txt文件。
public void putObjectFromByteArray() {
// 初始化 Ks3Client,参见“初始化”文档
Ks3Client ks3Client = initKs3Client();
try {
byte[] content = "<your-content>".getBytes(StandardCharsets.UTF_8);
// 将 Byte 数组转换为输入流
InputStream inputStream = new ByteArrayInputStream(content);
// 初始化上传对象请求,设置 bucket,objectKey,输入流
PutObjectRequest request = new PutObjectRequest("<your-bucket>", "<object-key>", inputStream);
// 设置存储类型
request.setStorageClass(StorageClass.Standard);
// 设置 ACL
request.setCannedAcl(CannedAccessControlList.Private);
// 或者设置自定义权限
AccessControlList acl = new AccessControlList();
acl.addGrant(new GranteeId("<grantee-id>"), Permission.Read);
request.setAcl(acl);
// 设置标签
ObjectTagging objectTagging = new ObjectTagging();
objectTagging.addObjectTag("key1", "value1");
objectTagging.addObjectTag("key2", "value2");
request.setObjectTagging(objectTagging);
// 设置 metadata
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("text/plain");
metadata.setUserMeta("key1", "value1");
request.setObjectMeta(metadata);
// 设置 KS3 托管密钥的服务端加密
// metadata.setSseAlgorithm("AES256");
// 或者设置自定义密钥的服务端加密
// request.setSseCustomerKey(getCustomerKey());
// 设置是否禁止覆盖
request.setForbidOverwrite(true);
// 发起上传请求
PutObjectResult putObjectResult = ks3Client.putObject(request);
System.out.println("ETag: " + putObjectResult.geteTag());
System.out.println("Crc64Ecma: " + putObjectResult.getCrc64Ecma());
} catch (Ks3ServiceException e) {
System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
System.out.println("Error Message: " + e.getErrorMessage());
System.out.println("Error Code: " + e.getErrorCode());
System.out.println("Request ID: " + e.getRequestId());
} catch (Ks3ClientException e) {
System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
System.out.println("Error Message: " + e.getMessage());
} finally {
// 不再使用时,关闭 Ks3Client
ks3Client.shutdown();
}
}
上传网络流
以下代码用于将网络流上传到目标存储空间examplebucket中exampledir目录下的exampleobject.txt文件。
public void putObjectFromInputStream() {
// 初始化 Ks3Client,参见“初始化”文档
Ks3Client ks3Client = initKs3Client();
// 填写网络流地址,注意:上传后须关闭流!这里 try 语句会自动关闭流
try (InputStream inputStream = new URL("https://www.ksyun.com").openStream()) {
// 初始化上传对象请求,设置 bucket,objectKey,输入流
PutObjectRequest request = new PutObjectRequest("<your-bucket>", "<object-key>", inputStream);
// 设置存储类型
request.setStorageClass(StorageClass.Standard);
// 设置 ACL
request.setCannedAcl(CannedAccessControlList.Private);
// 或者设置自定义权限
AccessControlList acl = new AccessControlList();
acl.addGrant(new GranteeId("<grantee-id>"), Permission.Read);
request.setAcl(acl);
// 设置标签
ObjectTagging objectTagging = new ObjectTagging();
objectTagging.addObjectTag("key1", "value1");
objectTagging.addObjectTag("key2", "value2");
request.setObjectTagging(objectTagging);
// 设置 metadata
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("text/plain");
metadata.setUserMeta("key1", "value1");
request.setObjectMeta(metadata);
// 设置 KS3 托管密钥的服务端加密
// metadata.setSseAlgorithm("AES256");
// 或者设置自定义密钥的服务端加密
// request.setSseCustomerKey(getCustomerKey());
// 设置是否禁止覆盖
request.setForbidOverwrite(true);
// 发起上传请求
PutObjectResult putObjectResult = ks3Client.putObject(request);
System.out.println("ETag: " + putObjectResult.geteTag());
System.out.println("Crc64Ecma: " + putObjectResult.getCrc64Ecma());
} catch (Ks3ServiceException e) {
System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
System.out.println("Error Message: " + e.getErrorMessage());
System.out.println("Error Code: " + e.getErrorCode());
System.out.println("Request ID: " + e.getRequestId());
} catch (Ks3ClientException e) {
System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
System.out.println("Error Message: " + e.getMessage());
} catch (MalformedURLException e) {
System.out.println("MalformedURLException occurred, which means the URL is not valid.");
} catch (IOException e) {
System.out.println("IOException occurred, which means the network stream is not available.");
} finally {
// 不再使用时,关闭 Ks3Client
ks3Client.shutdown();
}
}
如果用户设置了回调,那么当文件即将上传成功时,KS3将会使用POST的方式调用用户提供的回调地址,如果调用成功且用户处理成功【用户处理成功指返回{“result”:true}给KS3,处理失败返回{“result”:false}),那么文件才会真正的上传成功,如果调用失败或者用户处理失败,那么文件最终会上传失败】。用户可以设置KS3回调时的body,最后KS3将会把用户提供的参数组织成json格式返回给用户。在下面示例中,KS3回调时的body为
{
"bucket": <实际存储的bucket>,
"createTime": <文件创建时间>,
"etag": <文件的etag,
即文件的MD5经hex处理后的值>,
"key": <文件实际保持的key>,
"mimType": <文件的Content-Type>,
"objectSize": <文件的字节数大小>,
"time": "20150222"
}
示例代码:
// yourEndpoint填写Bucket所在地域对应的Endpoint。以中国(北京)为例,Endpoint填写为ks3-cn-beijing.ksyuncs.com。如果使用自定义域名,设置endpoint为自定义域名,同时设置domainMode为true
String endpoint = "yourEndpoint";
// 金山云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用子账号账号进行 API 访问或日常运维,请登录 https://uc.console.ksyun.com/pro/iam/#/user/list 创建子账号。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 创建Ks3ClientConfig 实例。
Ks3ClientConfig config = new Ks3ClientConfig();
// 设置域名
config.setEndpoint(endpoint);
/**
* false: (推荐)使用三级域名:{bucketName}.{endpoint}/{objectKey}的形式访问
* true: 使用二级域名:{endpoint}/{bucketName}/{objectKey}的形式访问
* 如果domainMode设置为true,则pathStyleAccess可忽略设置
*/
config.setPathStyleAccess(false);
// 创建Ks3Client实例
Ks3 client = new Ks3Client(accessKeyId,accessKeySecret,config);
// 创建回调配置
CallBackConfiguration config = new CallBackConfiguration();
config.setCallBackUrl("http://10.4.2.38:19090/");//KS3服务器回调的地址
// 以下为KS3服务器访问http://10.4.2.38:19090/时body中的参数
Map<String,MagicVariables> magicVariables = new HashMap<String,MagicVariables>();
magicVariables.put("bucket", MagicVariables.bucket);
magicVariables.put("createTime", MagicVariables.createTime);
magicVariables.put("etag", MagicVariables.etag);
magicVariables.put("key", MagicVariables.key);
magicVariables.put("mimeType", MagicVariables.mimeType);
magicVariables.put("objectSize", MagicVariables.objectSize);
// 设置魔法变量
config.setBodyMagicVariables(magicVariables);
// 用户可以自己定义返回的参数。
Map<String,String> kssVariables = new HashMap<String,String>();
kssVariables.put("time", "20150222");
// 填写字符串。
String content = "Hello KS3";
// 上传文件请求
PutObjectRequest putObjectRequest = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", new ByteArrayInputStream(content.getBytes()), metadata);
// 设置回调配置
request.setCallBackConfiguration(config);
// 回调上传字符串
client.putObject(putObjectRequest);
注意:上传回调请参见异步数据处理命令。
1. 如您的Bucket创建时间在2022年7月8日前,既可以使用二级域名访问也可以使用三级域名访问,如您的Bucket创建时间在2022年7月8日后,只能使用三级域名访问。
2. KS3 Java SDK 1.0.3
、1.0.4
、1.0.5
版本,需关闭上传文件结果中的流,设置putObjectResult.getContent().close();
。
纯净模式