云服务器内容精选

  • 代码示例 本示例展示了如何通过使用断点续传方式将本地文件localfile上传到examplebucket桶下的objectKey对象中。 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 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.CompleteMultipartUploadResult; import com.obs.services.model.UploadFileRequest; public class UploadFile001 { 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实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { UploadFileRequest request = new UploadFileRequest("examplebucket", "objectKey"); // 设置待上传的本地文件,localfile为待上传的本地文件路径,需要指定到具体带文件后缀的文件名 request.setUploadFile("localfile"); // 设置分段上传时的最大并发数 request.setTaskNum(5); // 设置分段大小为10MB request.setPartSize(10 * 1024 * 1024); // 开启断点续传模式 request.setEnableCheckpoint(true); // 进行断点续传上传 CompleteMultipartUploadResult result = obsClient.uploadFile(request); System.out.println("UploadFile successfully"); } catch (ObsException e) { // 发生异常时可再次调用断点续传上传接口进行重新上传 System.out.println("UploadFile 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("UploadFile failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 接口约束 您必须是桶拥有者或拥有上传对象的权限,才能上传对象。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:PutObject权限,如果使用桶策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 断点续传上传接口传入的文件大小至少要100K以上。 使用SDK的断点续传接口时,必须开启断点续传选项后才能在进程再次进入时读取上一次上传的进度。
  • 功能说明 对分段上传的封装和加强,解决上传大文件时由于网络不稳定或程序崩溃导致上传失败的问题。其原理是将待上传的文件分成若干个分段分别上传,并实时地将每段上传结果统一记录在checkpoint文件中,仅当所有分段都上传成功时返回上传成功的结果,否则返回错误信息提醒用户再次调用接口进行重新上传(重新上传时因为有checkpoint文件记录当前的上传进度,避免重新上传所有分段,从而节省资源提高效率)。
  • 追加上传 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 追加上传可实现对同一个对象追加数据内容的功能。您可以通过ObsClient.AppendObject进行追加上传。示例代码如下: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); try { // 第一次追加上传 AppendObjectRequest request = new AppendObjectRequest(); request.BucketName = "bucketname"; request.ObjectKey = "objectkey"; request.InputStream = new MemoryStream(Encoding.UTF8.GetBytes("Hello OBS")); AppendObjectResponse response = client.AppendObject(request); // 第二次追加上传 request.Position = response.NextPosition; request.InputStream = new MemoryStream(Encoding.UTF8.GetBytes("Hello OBS Again")); response = client.AppendObject(request); Console.WriteLine("NextPosition:{0}", response.NextPosition); Console.WriteLine("ETag:{0}", response.ETag); // 通过获取对象属性接口获取下次追加上传的位置 GetObjectMetadataResponse metadataResponse = client.GetObjectMetadata("bucketname", "objectkey"); Console.WriteLine("NextPosition from metadata:{0}", metadataResponse.NextPosition); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } ObsClient.PutObject上传的对象可覆盖ObsClient.AppendObject上传的对象,覆盖后对象变为普通对象,不可再进行追加上传。 第一次调用追加上传时,如果已存在同名的普通对象,则会抛出异常(HTTP状态码为409)。 每次追加上传返回的ETag是当次追加数据内容的ETag,不是完整对象的ETag。 单次追加上传的内容不能超过5GB,且最多支持10000次追加上传。 追加上传成功后,可通过AppendObjectResponse.NextPosition获取下次追加上传的位置;或者通过ObsClient.GetObjectMetadata接口获取下次追加上传的位置。 父主题: 上传对象
  • 对象上传简介 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 在OBS中,用户操作的基本数据单元是对象。OBS PHP SDK提供了丰富的对象上传接口,可以通过以下方式上传对象: 文本上传 流式上传 文件上传 分段上传 基于表单上传 SDK支持上传0KB~5GB的对象。流式上传和文件上传的内容大小不能超过5GB;当上传较大文件时,请使用分段上传,分段上传每段内容大小不能超过5GB;基于表单上传提供了基于浏览器表单上传对象的方式。 如果上传的对象权限设置为匿名用户读取权限,对象上传成功后,匿名用户可通过链接地址访问该对象数据。对象链接地址格式为:https://桶名.域名/文件夹目录层级/对象名。如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级。 父主题: 上传对象
  • 断点续传上传 当上传大文件时,经常出现因网络不稳定或程序崩溃导致上传失败的情况。失败后再次重新上传不仅浪费资源,而且当网络不稳定时仍然有上传失败的风险。断点续传上传接口能有效地解决此类问题引起的上传失败,其原理是将待上传的文件分成若干个分段分别上传,并实时地将每段上传结果统一记录在checkpoint文件中,仅当所有分段都上传成功时返回上传成功的结果,否则抛出异常提醒用户再次调用接口进行重新上传(重新上传时因为有checkpoint文件记录当前的上传进度,避免重新上传所有分段,从而节省资源提高效率)。 您可以通过uploadFile进行断点续传上传。该接口可设置的参数如下: 参数 作用 OBS iOS SDK对应方法 bucketName 桶名,必选参数。 request.bucketName objectKey 对象名,必选参数。 request.objectKey objectACLPolicy 对象访问策略。 request.objectACLPolicy storageClass 对象存储类型。 request.storageClass metaDataDict 对象元数据。 request.metaDataDict websiteRedirectLocation 网址重定向位置。 request.websiteRedirectLocation encryption 加密方式。 request.encryption enableCheckpoint 是否开启断点续传模式,默认为NO,表示不开启。 request.enableCheckpoint enableMD5Check 是否开启MD5校验,默认为NO,表示不开启。 request.enableMD5Check checkpointFilePath 记录上传进度的文件,只在断点续传模式下有效。当该值为空时,默认与待上传的本地文件同目录。文件名后缀可指定为obsuploadcheckpoint。 request.checkpointFilePath partSize 分段大小,单位字节,取值范围是100KB~5GB,默认为5MB。 request.partSize 以下代码展示了如何使用断点续传上传接口上传文件: static OBSClient *client; NSString *endPoint = @"your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html char* ak_env = getenv("AccessKeyID"); char* sk_env = getenv("SecretAccessKey"); NSString *AK = [NSString stringWithUTF8String:ak_env]; NSString *SK = [NSString stringWithUTF8String:sk_env]; // 初始化身份验证 OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK]; //初始化服务配置 OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider]; // 初始化client client = [[OBSClient alloc] initWithConfiguration:conf]; // 分段上传的最大并发数 client.configuration.maxConcurrentUploadRequestCount = 5; // 分段上传请求的最大连接数 client.configuration.uploadSessionConfiguration.HTTPMaximumConnectionsPerHost = 10; NSString *filePath = [[NSBundle mainBundle]pathForResource:@"fileName" ofType:@"Type"]; OBSUploadFileRequest *request = [[OBSUploadFileRequest alloc]initWithBucketName:@"bucketname" objectKey:@"objectname" uploadFilePath:filePath]; // 分段大小为5MB request.partSize = [NSNumber numberWithInteger: 5 * 1024*1024]; // 开启断点续传模式 request.enableCheckpoint = YES; // 指定checkpoint文件路径 request.checkpointFilePath = @"Your CheckPoint File"; // 上传文件 request.uploadProgressBlock = ^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { NSLog(@"%0.1f%%",(float)floor(totalBytesSent*10000/totalBytesExpectedToSend)/100); }; OBSBFTask *task = [client uploadFile:request completionHandler:^(OBSUploadFileResponse *response, NSError *error) { NSLog(@"%@",response); if(error){ // 再次上传 } }]; 断点续传上传接口是利用分段上传特性实现的,是对分段上传的封装和加强。 断点续传上传接口不仅能在失败重传时节省资源提高效率,还因其对分段进行并发上传的机制能加快上传速度,帮助用户快速完成上传业务;且其对用户透明,用户不用关心checkpoint文件的创建和删除、分段任务的切分、并发上传的实现等内部细节。 enableCheckpoint参数默认是NO,代表不启用断点续传模式,此时断点续传上传接口退化成对分段上传的简单封装,不会产生checkpoint文件。 checkpointFile参数仅在enableCheckpoint参数为YES时有效。 当前,当有多个上传任务需要并发执行时,需为每个上传任务初始化一个client及request进行处理。 父主题: 上传对象
  • 代码示例 本示例用于追加上传examplebucket桶中的example/objectname对象 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 package main import ( "fmt" "os" "strings" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。 securityToken := os.Getenv("SecurityToken") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" " // 创建obsClient实例 // 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过obs.WithSecurityToken方法指定securityToken值。 obsClient, err := obs.New(ak, sk, endPoint, obs.WithSecurityToken(securityToken)) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.AppendObjectInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定追加上传对象,此处以 example/objectname 为例。 input.Key = "example/objectname" // 指定追加写位置。如果是首次上传时就必须指定position为0 input.Position = 0 // 指定待上传对象的数据流 input.Body = strings.NewReader("Hello OBS") // 追加上传对象 output, err := obsClient.AppendObject(input) if err == nil { fmt.Printf("Append object(%s) under the bucket(%s) successful!\n", input.Key, input.Bucket) fmt.Printf("ETag:%s, NextAppendPosition:%d\n", output.ETag, output.NextAppendPosition) return } fmt.Printf("Append objects under the bucket(%s) fail!\n", input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • 接口约束 您必须是桶拥有者或拥有上传对象的权限,才能上传对象。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:PutObject权限,如果使用桶策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点。 用户上传的对象存储在桶中。用户必须对桶有WRITE权限,才可以在桶中上传对象。同一个桶中存储的对象名必须是唯一的。 每次追加上传都会更新该对象的最后修改时间。 服务端加密SSE-C方式,那么追加上传和初始化段一样,设置诸如x-obs-server-side-encryption之类的请求Header,后续追加上传也必须携带。 服务端加密SSE-KMS方式,有且只有第一次上传且桶内不存在同名对象时,才设置诸如x-obs-server-side-encryption之类的请求Header,后续追加上传不携带。 每次追加上传的长度不能超过对象长度上限5G的限制。 每个Appendable对象追加写次数最多为10000次。 如果对象存储类型为COLD(归档存储),则不能调用该接口。 如果桶设置了跨区域复制配置,则不能调用该接口。 并行文件系统不支持追加写对象。
  • 返回结果说明 表7 返回结果 参数名称 参数类型 描述 output *AppendObjectOutput 参数解释: 接口返回信息,详情参考AppendObjectOutput。 err error 参数解释: 接口返回错误信息。 表8 AppendObjectOutput 参数名称 参数类型 描述 StatusCode int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 RequestId string 参数解释: OBS服务端返回的请求ID。 默认取值: 无 ResponseHeaders map[string][]string 参数解释: HTTP响应头信息。 默认取值: 无 VersionId string 参数解释: 对象的版本号。如果桶的多版本状态为开启,则会返回对象的版本号。 取值范围: 长度为32的字符串 默认取值: 无 ETag string 参数解释: 对象的ETag值,即base64编码的128位MD5摘要。ETag是对象内容的唯一标识,可以通过该值识别对象内容是否有变化。比如上传对象时ETag为A,下载对象时ETag为B,则说明对象内容发生了变化。ETag只反映变化的内容,而不是其元数据。上传的对象或拷贝操作创建的对象,都有唯一的ETag。 约束限制: 当对象是服务端加密的对象时,ETag值不是对象的MD5值。 取值范围: 长度为32的字符串。 默认取值: 无 SseHeader SseCHeader 或 SseKmsHeader 参数解释: 服务端加密头信息,选择SSE-C加密方式,则详见SseCHeader,选择SSE-KMS加密方式。则详见SseKmsHeader。 NextAppendPosition int64 参数解释: 下一次追加上传请求应该提供的追加写位置(position)。 约束限制: 需要追加写的对象首次上传时就必须指定为0,下次追加需要填写的值为服务端本次上传成功返回消息的NextAppendPosition。 取值范围: 0~(263-1),单位:字节。 默认取值: 0 表9 SseCHeader 参数名称 参数类型 是否必选 描述 Encryption string 作为请求参数时必选 参数解释: 表示服务端加密是SSE-C方式。对象使用SSE-C加密方式。 取值范围: 可选值:AES256,即选择SSE-C方式加密对象。 默认取值: 无 Key string 作为请求参数时必选 参数解释: SSE-C方式下加密使用的密钥,该密钥用于加密对象。 约束限制: 该头域由256bit的密钥经过Base64编码得到,示例:K7QkYpBkM5+hca27fsNkUnNVaobncnLht/rCB2o/9Cw= 默认取值: 无 KeyMD5 string 作为请求参数时可选 参数解释: SSE-C方式下加密使用密钥的MD5值,该值用于验证密钥传输过程中是否出错。 约束限制: 由密钥值经过MD5加密再经过Base64编码后得到,示例:4XvB3tbNTN+tIEVa0/fGaQ== 默认取值: 无 表10 SseKmsHeader 参数名称 参数类型 是否必选 描述 Encryption string 作为请求参数时必选 参数解释: 表示服务端加密是SSE-KMS方式。对象使用SSE-KMS方式加密。 取值范围: 可选值:kms,即选择SSE-KMS方式加密对象。 默认取值: 无 Key string 作为请求参数时可选 参数解释: SSE-KMS加密方式下使用的KMS主密钥的ID值。 取值范围: 有效值支持两种格式: regionID:domainID(账号ID):key/key_id key_id 其中: regionID是使用密钥所属region的ID,可在地区和终端节点页面获取; domainID是使用密钥所属账号的账号ID,获取方法参见如何获取账号ID和用户ID?; key_id是从数据加密服务创建的密钥ID,获取方法请参见查看密钥。 默认取值: 如果用户没有提供该头域,那么默认的主密钥将会被使用。 如果默认主密钥不存在,将默认创建并使用。
  • 对象上传简介 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 在OBS中,用户操作的基本数据单元是对象。OBS BrowserJS SDK提供了丰富的对象上传接口,可以通过以下方式上传对象: 文本上传 文件上传 分段上传 追加上传 基于表单上传 SDK支持上传0KB~5GB的对象。文件上传的内容大小不能超过5GB;当上传较大文件时,请使用分段上传,分段上传每段内容大小不能超过5GB;基于表单上传提供了基于浏览器表单上传对象的方式。 如果上传的对象权限设置为匿名用户读取权限,对象上传成功后,匿名用户可通过链接地址访问该对象数据。对象链接地址格式为:https://桶名.域名/文件夹目录层级/对象名。如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级。 父主题: 上传对象
  • 参数描述 字段名 类型 约束 说明 option 请求桶的上下文,配置option 必选 桶参数。 key char * 必选 对象名。 content_length uint64_t 必选 对象内容长度。 position char * 必选 追加写的起始位置。 put_properties obs_put_properties* 必选 上传对象属性。 encryption_params server_side_encryption_params * 可选 上传对象加密设置。 handler obs_append_object_handler * 必选 回调函数。 callback_data void * 可选 回调数据。
  • 返回结果说明 表3 PostSignatureResponse 参数名称 参数类型 描述 OriginPolicy String 参数解释: Policy未经过Base64之前的值,仅用于校验。示例如下: {"expiration":"2023-09-12T12:52:59Z","conditions":[{"content-type":"text/plain"},{"bucket":"examplebucket"},{"key":"example/objectname"},]}" 默认取值: 无 Policy String 参数解释: 表单中的policy,已经Base64之后的值。示例如下: eyJleHBpcmF0aW9uIjoiMjAyMy0wOS0xMlQxMjo1Mjo1OVoiLCJjb25kaXRpb25zIjpbeyJjb250ZW50LXR5cGUiOiJ0ZXh0L3BsYWluIn0seyJidWNrZXQiOiJleGFtcGxlYnVja2V0In0seyJrZXkiOiJleGFtcGxlL29iamVjdG5hbWUifSxdfQ== 默认取值: 无 Signature String 参数解释: 表单中的signature。示例如下: g0jQr4v9VWd1Q2FOFDG6LGfV9Cw= 默认取值: 无
  • 功能说明 基于表单上传是使用HTML表单形式上传对象到指定桶中,对象最大不能超过5GB。 您可以通过ObsClient.createPostSignature生成基于表单上传的请求参数。使用代码模拟表单上传的完整代码示例,参见PostObjectSample。您也可以通过如下步骤进行表单上传: 使用ObsClient.createPostSignature生成用于鉴权的请求参数。 准备表单HTML页面。 将生成的请求参数填入HTML页面。 选择本地文件,进行表单上传。 使用SDK生成的用于鉴权的请求参数包括两个: Policy,对应表单中policy字段。 Signature,对应表单中的signature字段。
  • 接口约束 您必须是桶拥有者或拥有上传对象的权限,才能上传对象。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:PutObject权限,如果使用桶策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 HTML表单中的policy,signature的值均是从ObsClient.createPostSignature的返回结果中获取。 上传对象 contentType字段需要手动修改为对应的Content-Type值。 在设置对象ACL权限时,HTML表单中的acl取值参见 OBS预定义的权限控制策略。 您可以直接下载表单HTML示例PostDemo。
  • 文件上传 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 文件上传使用本地文件作为对象的数据源。以下代码展示了如何进行文件上传: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 上传文件 try { PutObjectRequest request = new PutObjectRequest() { BucketName = "bucketname", //待传入目标桶名 ObjectKey = "objectname", //待传入对象名(对象名是对象在桶中的完整路径,如folder/test.txt,路径中不包含桶名) FilePath = "localfile",//待上传的本地文件路径,需要指定到具体的文件名 }; PutObjectResponse response = client.PutObject(request); Console.WriteLine("put object response: {0}", response.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } 上传的内容大小不能超过5GB。 父主题: 上传对象