全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

简单上传(Java)

最近更新时间:2025-04-25 15:43:03

简单上传只能上传小于等于5GB的文件,超过5GB的文件请使用分块上传高级上传

通过文件上传

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.31.0.41.0.5 版本,需关闭上传文件结果中的流,设置putObjectResult.getContent().close();

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈