云服务器内容精选

  • 功能介绍 用户可以通过本接口获取对象(Object)的标签信息。 如果请求中不携带版本号(versionId),需要确保执行者有GetObjectTagging权限。如果请求中携带版本号(versionId),需要确保执行者有GetObjectTagging+GetObjectVersionTagging权限。缺省情况下只有对象的所有者可以执行此操作,也可以通过设置桶策略或用户策略给其他用户。 默认获取Object当前版本的标签信息。可以通过指定versionId参数来获取指定Object版本的标签信息。如果对应版本为删除标记(Delete Marker),则OBS将返回404 Not Found。 文件桶不支持该功能。
  • 功能介绍 用户可以通过本接口删除对象(Object)的标签信息。 如果请求中不携带版本号(versionId),需要确保执行者有DeleteObjectTagging权限。如果请求中携带版本号(versionId),需要确保执行者有DeleteObjectTagging+DeleteObjectVersionTagging权限。缺省情况下只有对象的所有者可以执行此操作,也可以通过设置桶策略或用户策略给其他用户。 默认删除Object当前版本的标签信息。可以通过指定versionId参数来删除指定Object版本的标签信息。如果对应版本为删除标记(Delete Marker),则OBS将返回404 Not Found。 文件桶不支持该功能
  • 示例代码 本示例用于删除examplebucketname桶中exampleObjectKey对象的对象标签。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ObjectTaggingRequest; public class DeleteObjectTagging001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("AC CES S_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT") // 创建ObsClient实例 try (ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint)) { // 删除对象标签 String bucketName = "examplebucketname"; String objectKey = "exampleObjectKey"; String objectVersionId = ""; ObjectTaggingRequest objectTaggingRequest = new ObjectTaggingRequest(bucketName, objectKey, objectVersionId, null); obsClient.deleteObjectTagging(objectTaggingRequest); System.out.println("DeleteObjectTagging successfully"); } catch (ObsException e) { System.out.println("DeleteObjectTagging failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("DeleteObjectTagging failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 示例代码 本示例用于为examplebucketname桶中exampleObjectKey对象设置对象标签。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.BucketTagInfo.TagSet; import com.obs.services.model.ObjectTagResult; import com.obs.services.model.ObjectTaggingRequest; public class SetObjectTagging001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT") // 创建ObsClient实例 try (ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint)) { // 设置对象标签,请注意,该接口为全量设置接口,设置时注意会覆盖掉该对象之前的所有标签 String bucketName = "examplebucketname"; String objectKey = "exampleObjectKey"; String objectVersionId = ""; ObjectTagResult objectTagResult = new ObjectTagResult(); TagSet tagSet = new TagSet(); tagSet.addTag("tagKey1", "tagVal1"); tagSet.addTag("tagKey2", "tagVal2"); objectTagResult.setTagSet(tagSet); ObjectTaggingRequest objectTaggingRequest = new ObjectTaggingRequest(bucketName, objectKey, objectVersionId, objectTagResult); obsClient.setObjectTagging(objectTaggingRequest); System.out.println("SetObjectTagging successfully"); } catch (ObsException e) { System.out.println("SetObjectTagging failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("SetObjectTagging failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 获取账号、 IAM 用户、项目的名称和ID 从控制台获取账号名、账号ID、用户名、用户ID、项目名称、项目ID 在华为云首页右上角,单击“控制台”。 在右上角的用户名中选择“我的凭证”。 图1 进入我的凭证 在“我的凭证”界面,API凭证页签中,查看账号名、账号ID、用户名、用户ID、项目名称、项目ID。 每个区域的项目ID有所不同,需要根据业务所在的区域获取对应的项目ID。 图2 查看账号名、账号ID、用户名、用户ID、项目名称、项目ID 调用API获取用户ID、项目ID 获取用户ID请参考:管理员查询IAM用户列表。 获取项目ID请参考:查询指定条件下的项目列表。
  • 示例代码 这是CtrRSACipherGenerator的示例代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 import com.obs.services.ObsConfiguration; import com.obs.services.crypto.CTRCipherGenerator; import com.obs.services.crypto.CryptoObsClient; import com.obs.services.crypto.CtrRSACipherGenerator; import com.obs.services.exception.ObsException; import com.obs.services.model.GetObjectRequest; import com.obs.services.model.ObsObject; import com.obs.services.model.PutObjectResult; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.InvalidKeySpecException; public class CtrRSACipherGeneratorDemo001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 // String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); CtrRSACipherGenerator ctrRSACipherGenerator = null; try { String examplePrivateKeyPath = "yourRSAPrivateKeyPath"; String examplePublicKeyPath = "yourRSAPublicKeyPath"; ObsConfiguration config = new ObsConfiguration(); PrivateKey privateKeyObj = CtrRSACipherGenerator.importPK CS 8PrivateKey(examplePrivateKeyPath); PublicKey publicKeyObj = CtrRSACipherGenerator.importPublicKey(examplePublicKeyPath); ctrRSACipherGenerator = new CtrRSACipherGenerator( "example_master_key_info", true, config.getSecureRandom(), privateKeyObj, publicKeyObj); } catch (IllegalArgumentException | IOException | NoSuchAlgorithmException | InvalidKeySpecException e) { e.printStackTrace(); } assert ctrRSACipherGenerator != null; // 创建ObsClient实例 try (CryptoObsClient cryptoObsClient = new CryptoObsClient(ak, sk, securityToken, endPoint, ctrRSACipherGenerator)) { String exampleBucketName = "example-bucket"; String exampleObjectKey = "exampleObjectKey"; String examplePlainTextFilePath = "examplePlainTextFilePath"; String exampleDecryptedFilePath = "exampleDecryptedFilePath"; PutObjectResult putObjectResult = cryptoObsClient.putObject(exampleBucketName, exampleObjectKey, new File(examplePlainTextFilePath)); System.out.println("HTTP Code: " + putObjectResult.getStatusCode()); System.out.println("Etag: " + putObjectResult.getEtag()); // 客户端加密上传成功 System.out.println("CtrRSACipherGeneratorDemo001 putObject successfully"); GetObjectRequest getObjectRequest = new GetObjectRequest(exampleBucketName, exampleObjectKey); ObsObject obsObject = cryptoObsClient.getObject(getObjectRequest); InputStream input = obsObject.getObjectContent(); byte[] b = new byte[1024]; FileOutputStream fileOutputStream = new FileOutputStream(exampleDecryptedFilePath); int len; while ((len = input.read(b)) != -1) { fileOutputStream.write(b, 0, len); } fileOutputStream.close(); input.close(); System.out.println("HTTP Code: " + obsObject.getMetadata().getStatusCode()); // 客户端解密下载成功 System.out.println("CtrRSACipherGeneratorDemo001 getObject successfully"); // 验证加密之前的文件和解密之后的文件是否一致 byte[] plainTextFileSha256 = CTRCipherGenerator.getFileSha256Bytes(examplePlainTextFilePath); byte[] decryptedFileSha256 = CTRCipherGenerator.getFileSha256Bytes(exampleDecryptedFilePath); String plainTextFileSha256Base64Encoded = CTRCipherGenerator.getBase64Info(plainTextFileSha256); String decryptedFileSha256Base64Encoded = CTRCipherGenerator.getBase64Info(decryptedFileSha256); System.out.println("plainTextFileSha256 base64 encoded: " + plainTextFileSha256Base64Encoded); System.out.println("decryptedFileSha256 base64 encoded: " + decryptedFileSha256Base64Encoded); System.out.println( "plainTextFileSha256 equals decryptedFileSha256 ? " + decryptedFileSha256Base64Encoded.equals(plainTextFileSha256Base64Encoded)); System.out.println("CtrRSACipherGeneratorDemo001 successfully"); } catch (ObsException e) { System.out.println("CtrRSACipherGeneratorDemo001 failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code: " + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message: " + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); } catch (Exception e) { System.out.println("CtrRSACipherGeneratorDemo001 putObject failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 初始化CryptoCipher OBS Java SDK提供两种加密套件。您可根据使用场景自行选择。 CtrRSACipherGenerator继承于CTRCipherGenerator,不需要提供数据密钥或初始值,只需要提供RSA公钥或RSA私钥,用以加密和解密随机生成的数据密钥。 CTRCipherGenerator仅需提供一个数据密钥,所有对象均使用该数据密钥进行加密。 表1 CtrRSACipherGenerator类型参数 参数名称 参数类型 是否必选 描述 privateKey PrivateKey 解密文件时必选(例如getObject) 参数解释: RSA私钥。 默认取值: 无 publicKey PublicKey 加密文件时必选(例如putObject) 参数解释: RSA公钥。 默认取值: 无 masterKeyInfo String 可选 参数解释: 密钥信息,该信息会存至对象的自定义元数据中, 帮助您区分不同密钥,需您自行维护 masterKeyInfo与 密钥的映射关系。 默认取值: 无 secureRandom SecureRandom 必选 参数解释: 安全随机数生成器,用于随机生成cryptoKeyBytes和cryptoIvBytes,请您根据业务需求选择设置。 默认取值: 无 needSha256 boolean 可选 参数解释: 是否校验加密后数据的sha256,并设置加密前后的sha256作为自定义元数据。 说明: 为了节省内存开销,SDK 采用了流式计算的方法,这也就意味着,普通上传时需要读取并加密文件两次;在另外由于断点续传上传接口为分段上传接口的封装,在断点续传下,则需要读取并加密文件三次。 取值范围: true:设置need_sha256为true时,SDK会自动计算待上传对象的加密前sha256值与加密后的sha256值,并存至对象自定义元数据,同时也会在发送请求时将加密后的文件的sha256值置于请求头,服务端收到请求后会计算收到对象的sha256,如果sha256不一致会返回错误信息。 false:不计算校验加密后数据的sha256。 默认取值: false 表2 CTRCipherGenerator类型参数 参数名称 参数类型 是否必选 描述 masterKeyInfo String 可选 参数解释: 密钥信息,该信息会存至对象的自定义元数据中,帮助您区分不同cryptoKeyBytes,需您自行维护 masterKeyInfo与 cryptoKeyBytes的映射关系。 默认取值: 无 cryptoKeyBytes byte[] 必选 参数解释: 加密数据所使用的数据密钥。 约束限制: 长度必须为32 bytes。 默认取值: 无 cryptoIvBytes byte[] 可选 参数解释: 加密数据时所使用的初始值。 约束限制: 长度必须为16 bytes。 指定时,所有对象均使用该初始值加密;未指定时,SDK会为每个对象随机生成不同初始值。 默认取值: 无 secureRandom SecureRandom 必选 参数解释: 安全随机数生成器,用于在未设置cryptoKeyBytes或cryptoIvBytes时随机生成缺失的对应参数,请您根据业务需求设置。 默认取值: 无 needSha256 boolean 可选 参数解释: 是否校验加密后数据的sha256,并设置加密前后的sha256作为自定义元数据。 说明: 为了节省内存开销,SDK 采用了流式计算的方法,这也就意味着,普通上传时需要读取并加密文件两次;在另外由于断点续传上传接口为分段上传接口的封装,在断点续传下,则需要读取并加密文件三次。 取值范围: true:设置need_sha256为true时,SDK会自动计算待上传对象的加密前sha256值与加密后的sha256值,并存至对象自定义元数据,同时也会在发送请求时将加密后的文件的sha256值置于请求头,服务端收到请求后会计算收到对象的sha256,如果sha256不一致会返回错误信息。 false:不计算校验加密后数据的sha256。 默认取值: false
  • 加密过程与加密套件 OBS Java SDK提供了两个不同的加密套件生成器,分别是基于AES-CTR加密方法的CTRCipherGenerator与基于RSA + AES-CTR加密的CtrRSACipherGenerator。 使用CTRCipherGenerator上传对象时,用户需要提供一个用来加密数据的数据密钥,SDK将会针对每个对象随机生成一个初始值,并使用数据密钥与初始值加密对象,加密完成后将加密后文件上传至OBS,并将对应的初始值存储至对象元数据中。下载该对象时,用户需要提供对应的数据密钥,SDK会自动获取保存在对象元数据中的初始值,使用数据密钥与初始值解密对象并返回。下载时如果提供了与加密时不同的数据密钥,SDK也将返回不可用的解密后文件。 使用CtrRSACipherGenerator上传对象时,用户需要提供一个RSA 公钥,SDK会针对每个对象随机生成一个数据密钥和初始值,并使用数据密钥与初始值加密对象,加密完成后将加密后文件上传至OBS,随后会使用RSA密钥加密数据密钥,并将加密后的数据密钥与初始值存储至对象元数据中。下载该对象时,用户需要提供对应的RSA私钥,SDK会自动获取保存在对象元数据中的数据密钥与初始值,并使用私钥解密数据密钥,如果提供的私钥与上传时使用的密钥不匹配,将会抛出异常。解密成功后,SDK将会使用解密后的数据密钥与初始值解密对象并返回。
  • 元数据中的解密信息 SDK会将解密所需的必要信息存至对象的对象自定义元数据,并且不会有其他备份,如果您对这些数据进行了修改,将会造成数据无法解密,需要保存的信息及其含义如下表: 表2 参数名称 是否可选 描述 encrypted-algorithm 必选 加密套件的信息。 encrypted-object-key 必选(使用RSA加密套件时) 使用RSA密钥加密后的数据密钥。 encrypted-start 必选 加密该对象所使用的初始值经Base64编码后的字符串。 master-key-info 可选 加密密钥的信息。 plaintext-sha256 可选 加密前对象的sha256,流式上传不计算sha256。 plaintext-content-length 可选 加密前对象的长度,流对象在上传之前无法获取长度。 encrypted-sha256 可选 加密后对象的sha256,流式上传不计算sha256。
  • 常见的Content-Type 常见的Content-Type(MIME)列表如下: 表1 常见的Content-Type(MIME)列表 文件扩展名 Content-Type(Mime-Type) 文件扩展名 Content-Type(Mime-Type) .*(二进制流,未知的文件类型) application/octet-stream .tif image/tiff .a11 application/x-a11 .acp audio/x-mei-aac .ai application/postscript .aif audio/aiff .aifc audio/aiff .aiff audio/aiff .anv application/x-anv .apk application/vnd.android.package-archive .asa text/asa .asf video/x-ms-asf .asp text/asp .asx video/x-ms-asf .au audio/basic .avi video/avi .awf application/vnd.adobe.workflow .biz text/xml .bmp application/x-bmp .bot application/x-bot .c4t application/x-c4t .c90 application/x-c90 .cal application/x-cals .cat application/vnd.ms-pki.seccat .cdf application/x-netcdf .cdr application/x-cdr .cel application/x-cel .cer application/x-x509-ca-cert .cg4 application/x-g4 .cgm application/x-cgm .cit application/x-cit .class java/ .cml text/xml .cmp application/x-cmp .cmx application/x-cmx .cot application/x-cot .crl application/pkix-crl .crt application/x-x509-ca-cert .csi application/x-csi .css text/css .csv text/csv .cut application/x-cut .dbf application/x-dbf .dbm application/x-dbm .dbx application/x-dbx .dcd text/xml .dcx application/x-dcx .der application/x-x509-ca-cert .dgn application/x-dgn .dib application/x-dib .dll application/x-msdownload .doc application/msword .docx application/vnd.openxmlformats-officedocument.wordprocessingml.document .dot application/msword .dotx application/vnd.openxmlformats-officedocument.wordprocessingml.template .drw application/x-drw .dtd text/xml .dwf Model/vnd.dwf .dwf application/x-dwf .dwg application/x-dwg .dxb application/x-dxb .dxf application/x-dxf .edn application/vnd.adobe.edn .emf application/x-emf .eml message/rfc822 .ent text/xml .epi application/x-epi .eps application/x-ps .eps application/postscript .etd application/x-ebx .exe application/x-msdownload .fax image/fax .fdf application/vnd.fdf .fif application/fractals .fo text/xml .frm application/x-frm .g4 application/x-g4 .gbr application/x-gbr . application/x- .gif image/gif .gl2 application/x-gl2 .gp4 application/x-gp4 .hgl application/x-hgl .hmr application/x-hmr .hpg application/x-hpgl .hpl application/x-hpl .hqx application/mac-binhex40 .hrf application/x-hrf .hta application/hta .htc text/x-component .htm text/html .html text/html .htt text/webviewhtml .htx text/html .icb application/x-icb .ico image/x-icon .ico application/x-ico .iff application/x-iff .ig4 application/x-g4 .igs application/x-igs .iii application/x-iphone .img application/x-img .ins application/x-internet-signup .ipa application/vnd.iphone .isp application/x-internet-signup .IVF video/x-ivf .java java/* .jfif image/jpeg .jpe image/jpeg .jpe application/x-jpe .jpeg image/jpeg .jpg image/jpeg .jpg application/x-jpg .js application/x-javascript .jsp text/html .la1 audio/x-liquid-file .lar application/x-laplayer-reg .latex application/x-latex .lavs audio/x-liquid-secure .lbm application/x-lbm .lmsff audio/x-la-lms .ls application/x-javascript .ltr application/x-ltr .m1v video/x-mpeg .m2v video/x-mpeg .m3u audio/mpegurl .m4e video/mpeg4 .mac application/x-mac .man application/x-troff-man .math text/xml .mdb application/msaccess .mdb application/x-mdb .mfp application/x-shockwave-flash .mht message/rfc822 .mhtml message/rfc822 .mi application/x-mi .mid audio/mid .midi audio/mid .mil application/x-mil .mml text/xml .mnd audio/x-musicnet-download .mns audio/x-musicnet-stream .mocha application/x-javascript .mov video/quicktime .movie video/x-sgi-movie mp1 audio/mp1 .mp2 audio/mp2 .mp2v video/mpeg .mp3 audio/mp3 .mp4 video/mp4 .mpa video/x-mpg .mpd application/vnd.ms-project .mpe video/x-mpeg .mpeg video/mpg .mpg video/mpg .mpga audio/rn-mpeg .mpp application/vnd.ms-project .mps video/x-mpeg .mpt application/vnd.ms-project .mpv video/mpg .mpv2 video/mpeg .mpw application/vnd.ms-project .mpx application/vnd.ms-project .mtx text/xml .mxp application/x-mmxp .net image/pnetvue .nrf application/x-nrf .nws message/rfc822 .odc text/x-ms-odc .out application/x-out .p10 application/pkcs10 .p12 application/x-pkcs12 .p7b application/x-pkcs7-certificates .p7c application/pkcs7-mime .p7m application/pkcs7-mime .p7r application/x-pkcs7-certreqresp .p7s application/pkcs7-signature .pc5 application/x-pc5 .pci application/x-pci .pcl application/x-pcl .pcx application/x-pcx .pdf application/pdf .pdb chemical/x-pdb .pdx application/vnd.adobe.pdx .pfx application/x-pkcs12 .pgl application/x-pgl .pic application/x-pic .pko application/vnd.ms-pki.pko .pl application/x-perl .plg text/html .pls audio/scpls .plt application/x-plt .png image/png .png application/x-png .pot application/vnd.ms-powerpoint .potx application/vnd.openxmlformats-officedocument.presentationml.template .ppa application/vnd.ms-powerpoint .ppm application/x-ppm .pps application/vnd.ms-powerpoint .ppsx application/vnd.openxmlformats-officedocument.presentationml.slideshow .ppt application/vnd.ms-powerpoint .ppt application/x-ppt . pptx application/vnd.openxmlformats-officedocument.presentationml.presentation .pr application/x-pr .prf application/pics-rules .prn application/x-prn .prt application/x-prt .ps application/x-ps .ps application/postscript .ptn application/x-ptn .pwz application/vnd.ms-powerpoint .r3t text/vnd.rn-realtext3d .ra audio/vnd.rn-realaudio .ram audio/x-pn-realaudio .ras application/x-ras .rat application/rat-file .rdf text/xml .rec application/vnd.rn-recording .red application/x-red .rgb application/x-rgb .rjs application/vnd.rn-realsystem-rjs .rjt application/vnd.rn-realsystem-rjt .rlc application/x-rlc .rle application/x-rle .rm application/vnd.rn-realmedia .rmf application/vnd.adobe.rmf .rmi audio/mid .rmj application/vnd.rn-realsystem-rmj .rmm audio/x-pn-realaudio .rmp application/vnd.rn-rn_music_package .rms application/vnd.rn-realmedia-secure .rmvb application/vnd.rn-realmedia-vbr .rmx application/vnd.rn-realsystem-rmx .rnx application/vnd.rn-realplayer .rp image/vnd.rn-realpix .rpm audio/x-pn-realaudio-plugin .rsml application/vnd.rn-rsml .rt text/vnd.rn-realtext .rtf application/msword .rtf application/x-rtf .rv video/vnd.rn-realvideo .sam application/x-sam .sat application/x-sat .sdp application/sdp .sdw application/x-sdw .sis application/vnd.symbian.install .sisx application/vnd.symbian.install .sit application/x-stuffit .slb application/x-slb .sld application/x-sld .sldx application/vnd.openxmlformats-officedocument.presentationml.slide .slk drawing/x-slk .smi application/smil .smil application/smil .smk application/x-smk .snd audio/basic .sol text/plain .sor text/plain .spc application/x-pkcs7-certificates .spl application/futuresplash .spp text/xml .ssm application/streamingmedia .sst application/vnd.ms-pki.certstore .stl application/vnd.ms-pki.stl .stm text/html .sty application/x-sty .svg image/svg+xml .swf application/x-shockwave-flash .tdf application/x-tdf .tg4 application/x-tg4 .tga application/x-tga .tif image/tiff .tif application/x-tif .tiff image/tiff .tld text/xml .top drawing/x-top .torrent application/x-bittorrent .tsd text/xml .txt text/plain .uin application/x-icq .uls text/iuls .vcf text/x-vcard .vda application/x-vda .vdx application/vnd.visio .vml text/xml .vpg application/x-vpeg005 .vsd application/vnd.visio .vsd application/x-vsd .vss application/vnd.visio .vst application/vnd.visio .vst application/x-vst .vsw application/vnd.visio .vsx application/vnd.visio .vtx application/vnd.visio .vxml text/xml .wav audio/wav .wax audio/x-ms-wax .wb1 application/x-wb1 .wb2 application/x-wb2 .wb3 application/x-wb3 .wbmp image/vnd.wap.wbmp .wiz application/msword .wk3 application/x-wk3 .wk4 application/x-wk4 .wkq application/x-wkq .wks application/x-wks .wm video/x-ms-wm .wma audio/x-ms-wma .wmd application/x-ms-wmd .wmf application/x-wmf .wml text/vnd.wap.wml .wmv video/x-ms-wmv .wmx video/x-ms-wmx .wmz application/x-ms-wmz .wp6 application/x-wp6 .wpd application/x-wpd .wpg application/x-wpg .wpl application/vnd.ms-wpl .wq1 application/x-wq1 .wr1 application/x-wr1 .wri application/x-wri .wrk application/x-wrk .ws application/x-ws .ws2 application/x-ws .wsc text/scriptlet .wsdl text/xml .wvx video/x-ms-wvx .xap application/x-silverlight-app .x_b application/x-x_b .xdp application/vnd.adobe.xdp .xdr text/xml .xfd application/vnd.adobe.xfd .xfdf application/vnd.adobe.xfdf .xhtml text/html .xls application/vnd.ms-excel .xls application/x-xls .xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet .xltx application/vnd.openxmlformats-officedocument.spreadsheetml.template .xlw application/x-xlw .xml text/xml .xpl audio/scpls .xq text/xml .xql text/xml .xquery text/xml .xsd text/xml .xsl text/xml .xslt text/xml .xwd application/x-xwd .x_t application/x-x_t .yaml text/vnd.yaml .yml text/vnd.yml .webp image/webp .tar application/x-tar .zip application/zip
  • 如何生成SSE-C方式的加密密钥(Java SDK) 以下代码展示了如何生成SSE-C方式的加密密钥,以及密钥的MD5值如何生成: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 import java.nio.charset.Charset; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class SseCTool { public static void main(String[] args) { // 加密密钥示例:该密钥可根据业务需要自行修改,但长度必须为32个字符,即256 bit的字符串 String keyString = System.getenv("ACCESS_KEY_ID"); // 计算x-obs-server-side-encryption-customer-key头域 String customerKey = toBase64String(keyString.getBytes(Charset.forName("UTF-8"))); System.out.println("customer key is : " + customerKey); // 计算x-obs-server-side-encryption-customer-key-MD5头域 String customerKeyMD5 = computeMD5(fromBase64(customerKey)); System.out.println("md5 for customer key is : " + customerKeyMD5); } // 计算Base64字符串 public static String toBase64String(byte[] data) { java.util.Base64.Encoder encoder = java.util.Base64.getEncoder(); return new String(encoder.encode(data), Charset.forName("UTF-8")); } // 计算MD5字符串 public static String computeMD5(byte[] b64Data) { try { MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(b64Data); byte[] byteArray = md5.digest(); return toBase64String(byteArray); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return ""; } } public static byte[] fromBase64(String b64Data) { java.util.Base64.Decoder decoder = java.util.Base64.getDecoder(); return decoder.decode(b64Data.getBytes(Charset.forName("UTF-8"))); } } 父主题: 常见问题(Java SDK)
  • 对于加密类型的对象如何使用URL进行下载?(Java SDK) 如果是SSE-KMS方式进行加密的对象,使用URL下载时服务端会自动解密;如果对象是SSE-C方式进行加密的对象,由于解密需要设置请求头域,所以不能通过浏览器直接访问该对象,如果您是在编写代码来访问加密类型的对象,只需要为请求设置相应的头域信息即可,可参见代码示例:下载SSE-C加密类型的对象。 访问服务端加密对象必须使用HTTPS协议。 父主题: 常见问题(Java SDK)
  • 如果桶内已存在同名对象,如何判定覆盖上传成功?(Java SDK) 上传完成后,您可以调用ObsClient.getObjectMetadata接口获取目标对象大小和最后修改时间,再与数据源进行比较,如果两者大小一致且目标对象的最后修改时间晚于数据源的最后修改时间则表明上传成功,否则上传失败。ObsClient.getObjectMetadata接口的使用可参见18.4-获取对象元数据。 父主题: 常见问题(Java SDK)
  • 如何进行分段下载?(Java SDK) 在下载对象时,您可以指定下载对象的某一范围内的数据进行分段下载,步骤如下: 您需要以AK、SK、Endpoint先初始化一个客户端ObsClient; 指定桶名和对象名初始化一个GetObjectRequest请求,您可以通过GetObjectRequest.setRangeStart和GetObjectRequest.setRangeEnd接口设置将要下载的对象数据的开始和结束范围; 通过ObsClient.getObject接口发送步骤2的GetObjectRequest请求来进行分段下载。 详细操作可参见范围下载。 父主题: 常见问题(Java SDK)
  • 如何进行分段上传?(Java SDK) 在上传文件时,您可以指定上传文件的某一段的数据来进行分段上传,步骤如下: 您需要以AK、SK、Endpoint先初始化一个客户端ObsClient; 指定桶名和对象名初始化一个InitiateMultipartUploadRequest,您可以通过InitiateMultipartUploadRequest.setMetadata接口设置将要上传的对象的元数据信息,然后通过ObsClient.initiateMultipartUpload接口初始化一个分段上传任务,这个接口会返回一个全局唯一标示(Upload ID),用于标识本次分段上传任务; 指定桶名和对象名初始化一个UploadPartRequest请求,通过UploadPartRequest.setUploadId接口设置该上传段所属的uploadId,setPartNumber接口设置该上传段的段号,setFile接口设置该上传段所属的将要上传的大文件,setPartSize接口设置该上传段的段大小;然后通过ObsClient.uploadPart接口上传该段,这个接口会返回该上传段的ETag值; 在所有分段上传完成后,指定桶名、对象名、uploadId、partEtags来初始化一个CompleteMultipartUploadRequest请求,然后通过ObsClient.completeMultipartUpload接口进行合并段操作。 详细操作可参见分段上传。 父主题: 常见问题(Java SDK)