Uploading an Object - Resumable (SDK for C)
Function
The resumable upload is an encapsulated and enhanced version of the multipart upload used for dealing with possible upload failures of large files when the network connection is unstable or a program crashes. This API splits the file into multiple parts and uploads them individually. The upload result of each part is recorded in a checkpoint file in real time. A success message is returned only when all parts are uploaded. If any parts fail, an error message is returned telling you to call the API again to upload the failed parts. Since the checkpoint file contains the progress of each part, it saves you uploading all parts again in the event of an error.
You can call upload_file to perform a resumable upload.
Restrictions
- To upload an object, you must be the bucket owner or have the required permission (obs:object:PutObject in IAM or PutObject in a bucket policy). For details, see Introduction to OBS Access Control, IAM Custom Policies, and Configuring an Object Policy.
- The file uploaded by the resumable upload API must be at least 100 KB.
- You must enable the resumable upload option when you use this API, so the progress of the last upload can be obtained for upload resumption.
Method
1 2 3 4 5 |
void upload_file(const obs_options *options, char *key, server_side_encryption_params *encryption_params, obs_upload_file_configuration *upload_file_config, obs_upload_file_server_callback server_callback, obs_upload_file_response_handler *handler, void *callback_data); |
Request Parameters
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
options |
const obs_options* |
Yes |
Explanation: The context of the requested bucket. Refer to Configuring option (SDK for C) to set the AK, SK, endpoint, bucket, timeout, and temporary credentials through obs_options. Restrictions: None |
key |
char * |
Yes |
Explanation: Object name. An object name is a complete path that does not contain the bucket name. For example, if the access path is examplebucket.obs.eu-west-101.myhuaweicloud.eu/folder/test.txt, the object name is folder/test.txt. Restrictions: The name of each object in a bucket must be unique. Value range: The value can contain 1 to 1,024 characters. Default value: None |
upload_file_config |
Yes |
Explanation: Configuration of the file upload. Restrictions: None |
|
encryption_params |
No |
Explanation: Encryption setting of the uploaded object Restrictions: None |
|
handler |
Yes |
Explanation: A callback structure where all members are pointers to callback functions, used to set the callback functions that handle response data. You can set a callback function to copy the response data from the server to your custom callback_data. Restrictions: None |
|
callback_data |
void * |
No |
Explanation: Custom callback data. Restrictions: None Value range: None Default value: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
bucket_options |
Yes |
Explanation: The context of the requested bucket. Refer to Configuring option (SDK for C) to set the AK, SK, endpoint, bucket, timeout, and temporary credentials through obs_options. Restrictions: None |
|
request_options |
Yes |
Explanation: A callback structure where all members are pointers to callback functions, used to set the callback functions that handle response data. You can set a callback function to copy the response data from the server to your custom callback_data. Restrictions: None |
|
temp_auth |
No |
Explanation: Custom callback data. Restrictions: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
host_name |
char * |
Yes |
Explanation: The requested host name, used as an address for connecting to OBS. It is the domain name (the endpoint) of the server where the requested resource is stored. Example: host_name = "obs.eu-west-101.myhuaweicloud.eu"; Restrictions: The value does not need to contain http:// or https:// as a prefix, which is controlled using obs_protocol. Default value: None |
bucket_name |
char * |
Yes |
Explanation: Bucket name. Restrictions:
Default value: None |
useCname |
bool |
No |
Explanation: Whether to use a custom domain name to access OBS. Restrictions: None Value range: true: A custom domain name is used. false: A custom domain name is not used. Default value: false |
protocol |
No |
Explanation: Whether to use the HTTP or HTTPS protocol. Restrictions: None Value range: For details, see obs_protocol. Default value: OBS_PROTOCOL_HTTPS (HTTPS is used by default.) |
|
access_key |
char * |
Yes |
Explanation: Access key ID (AK). Restrictions: None Value range: For details, see 3. Default value: None |
secret_access_key |
char * |
Yes |
Explanation: Secret access key (SK). Restrictions: None Value range: For details, see 3. Default value: None |
storage_class |
No |
Explanation: Bucket storage class that can be specified at bucket creation. Restrictions: None Value range: See obs_storage_class. Default value: OBS_STORAGE_CLASS_STANDARD (Standard storage class) |
|
token |
char * |
No |
Explanation: The security token in temporary credentials. Restrictions: None Value range: For details, see 3. Default value: None |
epid |
char * |
No |
Explanation: Enterprise project ID that can be specified during bucket creation. If you have enabled EPS, you can obtain the project ID from the EPS console. Restrictions: The value needs to be represented as a UUID. This parameter is not required if EPS is not enabled. Example: 9892d768-2d13-450f-aac7-ed0e44c2585f Default value: None |
Value |
Description |
---|---|
OBS_STORAGE_CLASS_STANDARD |
Standard storage class. This class features low access latency and high throughput and is used for storing massive, frequently accessed (multiple times a month) or small objects (< 1 MB) requiring quick response. |
OBS_STORAGE_CLASS_STANDARD_IA |
Infrequent Access storage class. Used for storing data that is semi-frequently accessed (fewer than 12 times a year) but becomes instantly available when needed. |
OBS_STORAGE_CLASS_GLACIER |
Archive storage class. Used for storing rarely accessed (once a year) data. |
Value |
Description |
---|---|
OBS_PROTOCOL_HTTPS |
HTTPS is used for access. |
OBS_PROTOCOL_HTTP |
HTTP is used for access. |
Value |
Description |
---|---|
OBS_BUCKET_OBJECT |
Object bucket |
Value |
Description |
---|---|
OBS_BUCKET_LIST_ALL |
Lists all buckets. |
OBS_BUCKET_LIST_OBJECT |
Lists all object buckets. |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
connect_time |
int |
Yes |
Explanation: Timeout period for establishing an HTTP/HTTPS connection, in ms. Restrictions: None Value range: [10000, 60000] Default value: 60000 |
max_connected_time |
int |
Yes |
Explanation: Timeout period (in seconds) of a request. Restrictions: None Value range: None Default value: 0 (There is never automatic disconnection.) |
proxy_auth |
char* |
No |
Explanation: Proxy authentication information, in the format username:password Restrictions: None Value range: None Default value: None |
proxy_host |
char* |
No |
Explanation: IP address or host name of the proxy server. Restrictions: None Value range: None Default value: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
expires |
long long int |
Yes |
Explanation: Validity period of the temporary credentials, in seconds. Restrictions: None Value range: [0-630720000] Default value: None |
temp_auth_callback |
void(*temp_auth_callback)(char *temp_auth_url, uint64_t temp_auth_url_len, char*temp_auth_headers, uint64_t temp_auth_headers_len, void*callback_data) |
Yes |
Explanation: The pointer to the custom callback function, which is used to record the temporary URL and involved signature header to the custom callback data. Restrictions: None |
callback_data |
void * |
Yes |
Explanation: Custom callback data. Restrictions: None Value range: None Default value: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
temp_auth_url |
char * |
Yes |
Explanation: Temporary URL. OBS allows you to construct a URL for a specific operation. In such a URL, you use Query parameters to provide authentication information including the user AK, signature, and validity period. Anyone who has the URL can perform the specified operation. After receiving a request made using such a URL, OBS treats the requester as the user who issued the URL and processes the request. For example, if you construct a pre-signed URL for downloading an object and provide it to various users, they can use the URL to download the object without authentication, but they must do so within the validity period specified by the Expires parameter. Restrictions: None Value range: None Default value: None |
temp_auth_url_len |
uint64_t |
Yes |
Explanation: Length of the temporary URL. Restrictions: None Value range: None Default value: None |
temp_auth_headers |
char * |
Yes |
Explanation: Headers for temporary authentication. Restrictions: None Value range: None Default value: None |
temp_auth_headers_len |
uint64_t |
Yes |
Explanation: Number of temporary authentication headers. Restrictions: None Value range: None Default value: None |
callback_data |
void * |
Yes |
Explanation: Custom callback data. Restrictions: None Value range: None Default value: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
upload_file |
char * |
Yes |
Explanation: Path of the local file to be uploaded. Restrictions: None Value range: None Default value: None |
part_size |
uint64_t |
No |
Explanation: Part size, in bytes Restrictions: None Value range: 100 KB to 5 GB Default value: 5 MB |
check_point_file |
char * |
No |
Explanation: Path of the file that records the upload progress. This parameter is effective only in the resumable mode. If the value of this parameter is left blank, the file will be in the same directory as the local file to be uploaded. Restrictions: None Value range: None Default value: None |
enable_check_point |
int |
No |
Explanation: Whether to enable the resumable mode Restrictions: None Value range:
Default value: 0: disabled |
task_num |
int |
No |
Explanation: Maximum number of parts that can be uploaded concurrently Restrictions: None Value range: None Default value: 1 |
pause_upload_flag |
int * |
No |
Explanation: Flag indicating that the upload is paused. Restrictions: The value cannot be NULL. If the value is 1, the upload is paused. Value range: None Default value: None |
put_properties |
Yes |
Explanation: Object properties. Restrictions: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
content_type |
char * |
Yes |
Explanation: It specifies the file type of an object when it is downloaded. Restrictions: None Value range: See the Content-Type values defined in HTTP. Default value: None |
md5 |
char * |
Yes |
Explanation: Indicates the base64-encoded digest of the object data. It is provided for the OBS server to verify data integrity. The OBS server will compare this MD5 value with the MD5 value calculated based on the object data. If the two values are not the same, HTTP status code 400 is returned. Restrictions: The MD5 value of the object must be Base64 encoded. If the MD5 value is not specified, the OBS server will not verify the MD5 value of the object. Value range: Base64-encoded 128-bit MD5 value of the request body calculated according to RFC 1864. Example: n58IG6hfM7vqI4K0vnWpog== Default value: None |
cache_control |
char * |
Yes |
Explanation: It specifies the cache behavior of the web page when an object is downloaded. Restrictions: None Value range: See the Cache-Control values defined in HTTP. Default value: None |
content_disposition_filename |
char * |
Yes |
Explanation: It specifies the name of an object when it is downloaded. For example, if the value is set to test.txt, that is equivalent to adding the Content-Disposition: attachment; filename=test.txt header. Restrictions: None Value range: See the Content-Disposition values defined in HTTP. Default value: None |
content_encoding |
char * |
Yes |
Explanation: It specifies the content encoding format when an object is downloaded. Restrictions: None Value range: See the Content-Encoding values defined in HTTP. Default value: None |
website_redirect_location |
char * |
Yes |
Explanation: If the bucket is configured with website hosting, the request for obtaining the object can be redirected to another object in the bucket or an external URL. To another object in the same bucket: x-obs-website-redirect-location:/anotherPage.html To an external URL: x-obs-website-redirect-location:http://www.example.com/ Restrictions: The value must start with a slash (/), http://, or https:// and cannot exceed 2 KB. Value range: None Default value: None |
get_conditions |
No |
Explanation: Specifies a series of parameters for copying an object. Restrictions: None |
|
start_byte |
uint64_t |
No |
Explanation: Where the copy starts in the object Restrictions: None Value range: 0 (included) to the object length minus 1 (not included), in bytes Default value: 0 (The copy starts from the first byte of the object.) |
byte_count |
uint64_t |
No |
Explanation: Specifies the copy length. Restrictions:
Value range: None Default value: None |
upload_limit |
uint64_t |
No |
Explanation: Bandwidth limit for single connection requests. Restrictions: None Value range: 819200 to 838860800, in bit/s Default value: None |
expires |
int64_t |
No |
Explanation: Specifies the cache expiration time of the web page when the object is downloaded. Restrictions: None Value range: None Default value: None |
obs_expires |
int64_t |
No |
Explanation: Specifies when an object expires. It is measured in days. Once the object expires, it is automatically deleted. Restrictions: The value must be greater than the number of days that have passed since the object was created. For example, if the object was uploaded 10 days ago, you must specify a value greater than 10. Value range: The value is an integer greater than 0. Default value: None |
canned_acl |
No |
Explanation: Access control policy Restrictions: None Value range: For details, see obs_canned_acl. |
|
az_redundancy |
No |
Explanation: Specifies a series of parameters for copying an object. Restrictions: None Value range: For details, see obs_az_redundancy. |
|
meta_data_count |
int |
No |
Explanation: Number of elements in the meta_data array. Restrictions: None Value range: None Default value: None |
meta_data |
No |
Explanation: Custom metadata of the object. OBS allows you to use custom metadata to manage objects. When you retrieve or query the metadata of the object, the added custom metadata headers will be returned in the response. Restrictions:
|
|
metadata_action |
No |
Explanation: Metadata operation directive. Restrictions: None Value range: For details, see metadata_action_indicator. |
|
server_callback |
No |
Explanation: Parameters related to server callback. Restrictions: None |
Value |
Description |
---|---|
OBS_CANNED_ACL_PRIVATE |
Private read and write. A bucket or object can only be accessed by its owner. |
OBS_CANNED_ACL_PUBLIC_READ |
Public read and private write. If this permission is granted on a bucket, anyone can read the object list, multipart tasks, metadata, and object versions in the bucket. If this permission is set for an object, everyone can obtain the content and metadata of the object. |
OBS_CANNED_ACL_PUBLIC_READ_WRITE |
Public read and write. If this permission is set for a bucket, everyone can obtain the object list in the bucket, multipart uploads in the bucket, metadata of the bucket; upload objects; delete objects; initialize multipart uploads; upload parts; combine parts; copy parts; and abort multipart uploads. If this permission is set for an object, everyone can obtain the content and metadata of the object. |
OBS_CANNED_ACL_PUBLIC_READ_DELIVERED |
Public read on a bucket and its objects. If this permission is granted on a bucket, anyone can read the object list, multipart tasks, and bucket metadata, and can also read the content and metadata of the objects in the bucket. This permission cannot be granted on objects. |
OBS_CANNED_ACL_PUBLIC_READ_WRITE_DELIVERED |
Public read and write on a bucket and its objects. If this permission is granted on a bucket, anyone can read the object list, multipart uploads, and bucket metadata, and can upload or delete objects, initiate multipart upload tasks, upload parts, assemble parts, copy parts, and abort multipart uploads. They can also read the content and metadata of the objects in the bucket. This permission cannot be granted on objects. |
Value |
Description |
---|---|
OBS_REDUNDANCY_1AZ |
By default, a single-AZ bucket is created. |
OBS_REDUNDANCY_3AZ |
A 3-AZ bucket is created. |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
start_byte |
uint64_t |
No |
Explanation: Start position for object download. Restrictions: None Value range: 0 (included) to the object length minus 1 (not included), in bytes Default value: 0 (indicating that the download starts from the first byte of the object) |
byte_count |
uint64_t |
No |
Explanation: Specifies the length to be downloaded. Restrictions:
Value range: None Default value: None |
download_limit |
uint64_t |
No |
Explanation: Bandwidth limit for single connection requests. Restrictions: None Value range: 819200 to 838860800, in bit/s Default value: None |
if_modified_since |
int64_t |
No |
Explanation: The request succeeds if the object has been modified since the specified time; otherwise, an error is returned. Restrictions: None Value range: None Default value: None |
if_not_modified_since |
int64_t |
No |
Explanation: The request succeeds if the object has not been modified since the specified time; otherwise, an error is returned. Restrictions: None Value range: None Default value: None |
if_match_etag |
char * |
No |
Explanation: Preset ETag. If the ETag of the object to be downloaded or copied is the same as the preset ETag, the request succeeds. Otherwise, an error is returned. Restrictions: None Value range: The value must contain 32 characters. Default value: None |
if_not_match_etag |
char * |
No |
Explanation: Preset ETag. If the ETag of the object to be downloaded or copied is different from the preset ETag, the request succeeds. Otherwise, an error is returned. Restrictions: None Value range: The value must contain 32 characters. Default value: None |
image_process_config |
No |
Explanation: Image processing parameters. Restrictions: None |
Value |
Description |
---|---|
OBS_NO_METADATA_ACTION |
Default invalid value. |
OBS_REPLACE |
Uses the complete header carried in the current request to replace the original one and deletes the metadata that is not specified. |
OBS_REPLACE_NEW |
The metadata that has an existing value is replaced. A value is assigned to the metadata that does not have a value. The metadata that is not specified remains unchanged. Custom metadata is replaced. |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
callback_url |
char * |
Yes |
Explanation: After an object is uploaded successfully, OBS sends a callback request to the URL using the POST method. You can specify a maximum of 10 URLs. Use semicolons (;) to separate URLs. URL-encoding is required. Restrictions: None Value range: None Default value: None |
callback_host |
char * |
No |
Explanation: Value of the host header in the callback request. If this parameter is not specified, the value of host parsed from the callbackUrl parameter is used. Restrictions: None Value range: None Default value: None |
callback_body_type |
char * |
No |
Explanation: Value of the Content-Type header in the callback request. application/x-www-form-urlencoded and application/json are supported. If this parameter is not specified, the default value is as follows: application/json Restrictions: None Value range: None Default value: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
image_process_mode |
No |
Explanation: Image processing parameters. Restrictions: None Value range: For details, see image_process_mode_type. |
|
cmds_stylename |
char * |
No |
Explanation: Image processing parameters. Restrictions: None Value range: None Default value: None |
Value |
Description |
---|---|
obs_image_process_invalid_mode |
Default invalid value. |
obs_image_process_cmd |
Image processing parameters start with image. |
obs_image_process_style |
Image processing parameters start with style. |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
encryption_type |
No |
Explanation: Encryption type. Restrictions: None Value range: For details, see obs_encryption_type. |
|
kms_server_side_encryption |
char * |
No |
Explanation: Indicates that SSE-KMS is used for server-side encryption. Restrictions: None Value range:
Default value: None |
kms_key_id |
char * |
No |
Explanation: Key ID. If the SSE-KMS encryption is used with a specified key, the key ID is required. Restrictions: This header can only be used when you specify kms for the kms_server_side_encryption header. Value range: To obtain the key ID, see Viewing a CMK. Default value: If you specify kms for encryption but do not specify a key ID, the default master key will be used. If there is not a default master key, OBS will create one and use it. |
ssec_customer_algorithm |
char * |
No |
Explanation: Indicates the algorithm used to encrypt an object. Restrictions: The header is used only in SSE-C mode. Value range: AES256 (AES256 encryption algorithm) Default value: None |
ssec_customer_key |
char * |
No |
Explanation: Indicates the key used to encrypt an object. Restrictions: The header is used only in SSE-C mode. Value range: Base64-encoded 256-bit key Default value: None |
des_ssec_customer_algorithm |
char * |
No |
Explanation: Indicates the algorithm used to decrypt a source object. Restrictions: The header is used only in SSE-C mode. Value range: None Default value: None |
des_ssec_customer_key |
char * |
No |
Explanation: Indicates the key used to decrypt the source object. Restrictions: The header is used only in SSE-C mode. Value range: None Default value: None |
Value |
Description |
---|---|
OBS_ENCRYPTION_KMS |
Use the KMS encryption. |
OBS_ENCRYPTION_SSEC |
Use the SSE-C encryption. |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
response_handler |
Yes |
Explanation: Response callback function structure. Restrictions: None |
|
upload_file_callback |
Yes |
Explanation: The pointer to the callback function, where the callback parameters can be recorded in callback_data (custom callback data). Restrictions: None |
|
progress_callback |
Yes |
Explanation: Pointer to the progress callback function. Restrictions: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
status |
Yes |
Explanation: Request status Restrictions: None Value range: For details, see obs_status. |
|
result_message |
char * |
Yes |
Explanation: Upload result Restrictions: None Value range: None Default value: None |
part_count_return |
int |
Yes |
Explanation: Number of parts. Restrictions: None Value range: None Default value: None |
upload_info_list |
Yes |
Explanation: Part information. Restrictions: None |
|
callback_data |
void * |
Yes |
Explanation: The pointer to the custom callback data. Restrictions: None Value range: None Default value: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
part_num |
Yes |
Explanation: Part number Restrictions: None |
|
start_byte |
uint64_t |
Yes |
Explanation: Start position of part creation. Restrictions: None Value range: None Default value: None |
part_size |
uint64_t |
Yes |
Explanation: Part size. Restrictions: None Value range: None Default value: None |
status_return |
Yes |
Explanation: Part status. Restrictions: None Value range: For details, see part_upload_status. |
Value |
Description |
---|---|
UPLOAD_NOTSTART |
The upload has not started. |
UPLOADING |
Uploading. |
UPLOAD_FAILED |
The upload fails. |
UPLOAD_SUCCESS |
The file is uploaded. |
STATUS_BUTT |
Default status. |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
progress |
double |
Yes |
Explanation: Progress percentage. Restrictions: None Value range: None Default value: None |
uploadedSize |
uint64_t |
Yes |
Explanation: Number of bytes that have been uploaded. Restrictions: None Value range: None Default value: None |
fileTotalSize |
uint64_t |
Yes |
Explanation: Total number of bytes to be uploaded. Restrictions: None Value range: None Default value: None |
callback_data |
void * |
Yes |
Explanation: The pointer to the custom callback data. Restrictions: None Value range: None Default value: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
properties_callback |
Yes |
Explanation: The pointer to the response callback function. The content of properties in the callback can be recorded in callback_data (custom callback data). Restrictions: None |
|
complete_callback |
Yes |
Explanation: The pointer to the completion callback function. The content of obs_status and obs_error_details in the callback can be recorded in callback_data (custom callback data). Restrictions: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
properties |
const obs_response_properties* |
Yes |
Explanation: Parameters in the response headers. You are advised to record them to callback_data (custom callback data). Restrictions: None |
callback_data |
void * |
Yes |
Explanation: The pointer to the custom callback data. Restrictions: None Value range: None Default value: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
status |
Yes |
Explanation: Internal request status code of the SDK. Restrictions: None Value range: For details, see obs_status. |
|
error_details |
const obs_error_details* |
Yes |
Explanation: The pointer to the response callback function. The content of properties in the callback can be recorded in callback_data (custom callback data). Restrictions: None |
callback_data |
void * |
Yes |
Explanation: The pointer to the custom callback data. Restrictions: None Value range: None Default value: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
request_id |
const char * |
No |
Explanation: The value created by OBS to uniquely identify the request. OBS uses this value to locate the fault. Restrictions: None Value range: None Default value: None |
request_id2 |
const char * |
No |
Explanation: A special symbol that helps troubleshoot. Restrictions: None Value range: None Default value: None |
content_type |
const char * |
No |
Explanation: MIME type of the object. MIME type is a standard way of describing a data type and is used by the browser to decide how to display data. Restrictions: None Value range: None Default value: None |
content_length |
uint64_t |
No |
Explanation: The size (in bytes) of the response body. Restrictions: None Value range: None Default value: None |
server |
const char * |
No |
Explanation: Server header in an HTTP request. Restrictions: None Value range: None Default value: None |
etag |
const char * |
No |
Explanation: Base64-encoded, 128-bit MD5 value of an object. It uniquely identifies the content of an object and can be used to check the object integrity. For example, if the ETag is A when an object is uploaded and is B when the object is downloaded, it indicates that the object content has been changed. The ETag reflects changes to the contents of the object, not its metadata. An object created by an upload or copy operation has a unique ETag. Restrictions: If an object is encrypted using server-side encryption, the ETag is not the MD5 value of the object. Value range: The value must contain 32 characters. Default value: None |
expiration |
const char * |
No |
Explanation: Expiration details of the object. Restrictions: None Value range: An integer greater than 0, in days. Default value: None |
website_redirect_location |
const char * |
No |
Explanation: Indicates where an object request is redirected. If the bucket that contains the object is configured with Website settings, this parameter can be set in the object metadata so that the request for the object can be redirected to another object in the same bucket or an external URL after the website returns a 301 redirect response. To another object in the same bucket: x-obs-website-redirect-location:/anotherPage.html To an external URL: x-obs-website-redirect-location:http://www.example.com/ OBS obtains the specified value from the header and stores it in the object metadata WebsiteRedirectLocation. Restrictions:
Default value: None |
version_id |
const char * |
No |
Explanation: Object version ID. If the object has no version ID, the value is NULL. Restrictions: The value must contain 32 characters. Value range: None Default value: None |
meta_data_count |
int |
No |
Explanation: Number of elements in the meta_data array. Restrictions: None Value range: None Default value: None |
meta_data |
const obs_name_value * |
No |
Explanation: Custom metadata of the object. You can add custom metadata headers that start with x-obs-meta- for easy object management. When you retrieve or query the metadata of the object, the added custom metadata headers will be returned in the response. Restrictions: None |
use_server_side_encryption |
char |
No |
Explanation: If server-side encryption is enabled, this parameter is set to '\1'. Restrictions: None Value range: None Default value: None |
allow_origin |
const char * |
No |
Explanation: Returned if the request origin meets the CORS configured on the server. Restrictions: None Value range: The value that complies with the CORS Default value: None |
allow_headers |
const char * |
No |
Explanation: Returned if the request headers meet the CORS configured on the server. Restrictions: At most one asterisk (*) is allowed. Spaces, ampersands (&), colons (:), less-than signs (<), and full-width characters are not allowed. Value range: The value that complies with the CORS Default value: None |
max_age |
const char * |
No |
Explanation: MaxAgeSeconds in the CORS rules of the bucket. It specifies the time your client can cache the response for a cross-origin request. Restrictions: Each CORS rule can contain at most one MaxAgeSeconds. Value range: An integer greater than or equal to 0, in seconds. Default value: 3000 |
allow_methods |
const char * |
No |
Explanation: Indicates that methods in the rule are included in the response if Access-Control-Request-Method in the request meets the CORS configuration requirements when CORS is configured for buckets. Restrictions: None Value range:
Value range: None |
expose_headers |
const char * |
No |
Explanation: ExposeHeader in the CORS rules of the bucket. It specifies additional headers allowed in the response by a CORS rule. These headers provide extra information to clients. By default, a browser can access only headers Content-Length and Content-Type. If the browser needs to access other headers, you need to configure them as additional headers. Restrictions: Spaces, asterisks (*), ampersands (&), colons (:), less-than signs (<), and full-width characters are not allowed. Value range: None Default value: None |
storage_class |
const char * |
No |
Explanation: Object storage class. Restrictions: This header is returned only when the storage class of an object is not Standard. Value range:
Default value: None |
server_side_encryption |
const char * |
No |
Explanation: The encryption method used by the server. Example: x-obs-server-side-encryption:kms Restrictions: This header is included in a response if SSE-KMS is used. Value range:
Default value: None |
kms_key_id |
const char * |
No |
Explanation: Key ID. If the SSE-KMS encryption is used with a specified key, the key ID is required. Restrictions: This header can only be used when you specify kms for the server_side_encryption header. Value range: To obtain the key ID, see Viewing a CMK. Default value: If you specify kms for encryption but do not specify a key ID, the default master key will be used. If there is not a default master key, OBS will create one and use it. |
customer_algorithm |
const char * |
No |
Explanation: Indicates a decryption algorithm. This header is included in a response if SSE-C is used. Restrictions: None Value range: AES256 (AES256 decryption algorithm) Default value: None |
customer_key_md5 |
const char * |
No |
Explanation: Indicates the MD5 value of a key used to decrypt objects. This header is included in a response if SSE-C is used. Restrictions: Base64-encoded MD5 value of the key, for example, 4XvB3tbNTN+tIEVa0/fGaQ==. Value range: Base64-encoded MD5 value of the key ID. Default value: None |
bucket_location |
const char * |
No |
Explanation: Indicates the region where the bucket resides. Restrictions: None Value range: None Default value: None |
obs_version |
const char * |
No |
Explanation: OBS version of the bucket. Restrictions: None Value range:
Default value: None |
restore |
const char * |
No |
Explanation: Restoration status of an object. Examples: ongoing-request="true" (the object is being restored); ongoing-request="false", expiry-date="Wed, 7 Nov 2012 00:00:00 GMT" (the object has been restored) expiry-date indicates when the restored object will expire. Restrictions: This header is returned only for an Archive or Deep Archive object that is being restored or has been restored. Value range: None Default value: None |
obs_object_type |
const char * |
No |
Explanation: Type of the object. Restrictions: This header is returned only when the object is not a Normal object. Value range: Appendable Default value: None |
obs_next_append_position |
const char * |
No |
Explanation: Indicates the position to be provided for the next request. Restrictions: This header is returned only when the object is an Appendable object. Value range: None Default value: None |
obs_head_epid |
const char * |
No |
Explanation: Enterprise project ID for the current bucket. Users who have enabled the enterprise project function can obtain the ID from the enterprise project service. Restrictions: The value is a UUID. This parameter is not required if you have not enabled an enterprise project. Value range: None Default value: None |
reserved_indicator |
const char * |
No |
Explanation: A special symbol that helps troubleshoot. Restrictions: None Value range: None Default value: None |
Parameter |
Type |
Description |
---|---|---|
message |
const char* |
Explanation: Error details in the XML error response body. Restrictions: None Value range: See Error Codes. Default value: None |
resource |
const char* |
Explanation: Bucket or object related to the error. Restrictions: None Value range: None Default value: None |
further_details |
const char* |
Explanation: The value of the FurtherDetails element in the XML error response body. Restrictions: None Value range: None Default value: None |
extra_details_count |
int |
Explanation: The number of other elements in the XML error response body. Restrictions: None Value range: None Default value: None |
extra_details |
Explanation: Values of other elements in the XML error response body. Restrictions: None |
|
error_headers_count |
int |
Explanation: Number of headers in error_headers. Restrictions: None Value range: None Default value: None |
error_headers |
char** |
Explanation: All response headers that contain the error. Restrictions: None Value range: None Default value: None |
Parameter |
Type |
Mandatory (Yes/No) |
Description |
---|---|---|---|
name |
char * |
No |
Explanation: Key of a property. Restrictions: None Value range: None Default value: None |
value |
char * |
No |
Explanation: Property value. Restrictions: None Value range: None Default value: None |
Value |
Description |
---|---|
OBS_STATUS_OK |
The request is successful. |
OBS_STATUS_InitCurlFailed |
Failed to initialize curl. |
OBS_STATUS_InternalError |
Internal error. |
OBS_STATUS_OutOfMemory |
The local memory is insufficient. |
OBS_STATUS_FailedToIInitializeRequest |
Failed to initialize the request. |
OBS_STATUS_ConnectionFailed |
Network connection failed. |
OBS_STATUS_XmlParseFailure |
Failed to parse the XML file. |
OBS_STATUS_NameLookupError |
Domain name resolution failed. |
OBS_STATUS_FailedToConnect |
Failed to connect to the server. |
OBS_STATUS_PartialFile |
Network transmission. |
OBS_STATUS_InvalidParameter |
Invalid parameter. |
OBS_STATUS_NoToken |
The current number of concurrent tasks exceeds the maximum number (1000 by default). Use the set_online_request_max_count function to adjust the maximum number of concurrent tasks. |
OBS_STATUS_OpenFileFailed |
Failed to open the file. |
OBS_STATUS_AccessDenied |
The request is rejected. |
OBS_STATUS_MalformedPolicy |
The format of the request policy is incorrect. |
OBS_STATUS_MalformedXML |
The XML request format is incorrect. |
OBS_STATUS_MethodNotAllowed |
The request method is not allowed. |
OBS_STATUS_SignatureDoesNotMatch |
The signatures do not match. Check whether the AK, SK, and token are correct. |
OBS_STATUS_ServiceUnavailable |
Server exception. |
OBS_STATUS_SlowDown |
The request frequency is too high. |
Code Examples: Resumable Upload
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 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
#include "eSDKOBS.h" #include <stdio.h> #include <sys/stat.h> // The response callback function. The content of properties in the callback can be recorded in callback_data (custom callback data). obs_status response_properties_callback(const obs_response_properties *properties, void *callback_data); // The completion callback function. The content of obs_status and obs_error_details in the callback can be recorded in callback_data (custom callback data). void response_complete_callback(obs_status status, const obs_error_details *error, void *callback_data); void uploadFileResultCallback(obs_status status, char *resultMsg, int partCountReturn, obs_upload_file_part_info * uploadInfoList, void *callbackData); void test_progress_callback(double progress, uint64_t uploadedSize, uint64_t fileTotalSize, void *callback_data); int main() { // The following example shows how to use the resumable upload API to upload a file: // Call the obs_initialize method at the program entry to initialize global resources such as the network and memory. obs_initialize(OBS_INIT_ALL); obs_options options; // Create and initialize options, including the access domain name (host_name), access keys (access_key_id and access_key_secret), bucket name (bucket_name), and bucket storage class (storage_class). init_obs_options(&options); // Enter the endpoint corresponding to the bucket for host_name. EU-Dublin is used here as an example. Replace it with the one in your actual situation. options.bucket_options.host_name = "obs.eu-west-101.myhuaweicloud.eu"; // Hard-coded or plaintext AK and SK are risky. For security purposes, encrypt your AK and SK and store them in the configuration file or environment variables. // In this example, the AK and SK are stored in environment variables for identity authentication. Before running the code in this example, configure local environment variables ACCESS_KEY_ID and SECRET_ACCESS_KEY. options.bucket_options.access_key = getenv("ACCESS_KEY_ID"); options.bucket_options.secret_access_key = getenv("SECRET_ACCESS_KEY"); // Specify the bucket name, for example, example-bucket-name. char * bucketName = "example-bucket-name"; options.bucket_options.bucket_name = bucketName; //Initialize the put_properties structure. obs_put_properties put_properties; init_put_properties(&put_properties); obs_upload_file_configuration uploadFileInfo; memset(&uploadFileInfo, 0, sizeof(obs_upload_file_configuration)); uploadFileInfo.check_point_file = 0; uploadFileInfo.enable_check_point = 1; uploadFileInfo.part_size = 5L * 1024 * 1024; uploadFileInfo.task_num = 8; uploadFileInfo.upload_file = "./example_local_file_to_upload.tar"; uploadFileInfo.put_properties = &put_properties; int pause_upload_flag = 0; uploadFileInfo.pause_upload_flag = &pause_upload_flag; // Name of the object to be uploaded in resumable upload char *key = "example_upload_file_object_key"; obs_status ret_status = OBS_STATUS_BUTT; //Callback function obs_upload_file_response_handler Handler = { {&response_properties_callback, &response_complete_callback}, &uploadFileResultCallback, &test_progress_callback }; obs_upload_file_server_callback server_callback; init_server_callback(&server_callback); initialize_break_point_lock(); upload_file(&options, key, 0, &uploadFileInfo, server_callback, &Handler, &ret_status); deinitialize_break_point_lock(); if (OBS_STATUS_OK == ret_status) { printf("test upload file successfully. \n"); } else { printf("test upload file failed(%s).\n", obs_get_status_name(ret_status)); } // Release the allocated global resources. obs_deinitialize(); } // The response callback function. The content of properties in the callback can be recorded in callback_data (custom callback data). obs_status response_properties_callback(const obs_response_properties *properties, void *callback_data) { if (properties == NULL) { printf("error! obs_response_properties is null!"); if (callback_data != NULL) { obs_sever_callback_data *data = (obs_sever_callback_data *)callback_data; printf("server_callback buf is %s, len is %llu", data->buffer, data->buffer_len); return OBS_STATUS_OK; } else { printf("error! obs_sever_callback_data is null!"); return OBS_STATUS_OK; } } // Print the response. #define print_nonnull(name, field) \ do { \ if (properties-> field) { \ printf("%s: %s\n", name, properties->field); \ } \ } while (0) print_nonnull("request_id", request_id); print_nonnull("request_id2", request_id2); print_nonnull("content_type", content_type); if (properties->content_length) { printf("content_length: %llu\n", properties->content_length); } print_nonnull("server", server); print_nonnull("ETag", etag); print_nonnull("expiration", expiration); print_nonnull("website_redirect_location", website_redirect_location); print_nonnull("version_id", version_id); print_nonnull("allow_origin", allow_origin); print_nonnull("allow_headers", allow_headers); print_nonnull("max_age", max_age); print_nonnull("allow_methods", allow_methods); print_nonnull("expose_headers", expose_headers); print_nonnull("storage_class", storage_class); print_nonnull("server_side_encryption", server_side_encryption); print_nonnull("kms_key_id", kms_key_id); print_nonnull("customer_algorithm", customer_algorithm); print_nonnull("customer_key_md5", customer_key_md5); print_nonnull("bucket_location", bucket_location); print_nonnull("obs_version", obs_version); print_nonnull("restore", restore); print_nonnull("obs_object_type", obs_object_type); print_nonnull("obs_next_append_position", obs_next_append_position); print_nonnull("obs_head_epid", obs_head_epid); print_nonnull("reserved_indicator", reserved_indicator); int i; for (i = 0; i < properties->meta_data_count; i++) { printf("x-obs-meta-%s: %s\n", properties->meta_data[i].name, properties->meta_data[i].value); } return OBS_STATUS_OK; } // The completion callback function. The content of obs_status and obs_error_details in the callback can be recorded in callback_data (custom callback data). void response_complete_callback(obs_status status, const obs_error_details *error, void *callback_data) { if (callback_data) { obs_status *data = (obs_status *)callback_data; *data = status; } else { printf("Callback_data is NULL"); } if (error && error->message) { printf("Error Message: \n %s\n", error->message); } if (error && error->resource) { printf("Error Resource: \n %s\n", error->resource); } if (error && error->further_details) { printf("Error further_details: \n %s\n", error->further_details); } if (error && error->extra_details_count) { int i; for (i = 0; i < error->extra_details_count; i++) { printf("Error Extra Detail(%d):\n %s:%s\n", i, error->extra_details[i].name, error->extra_details[i].value); } } if (error && error->error_headers_count) { int i; for (i = 0; i < error->error_headers_count; i++) { const char *errorHeader = error->error_headers[i]; printf("Error Headers(%d):\n %s\n", i, errorHeader == NULL ? "NULL Header" : errorHeader); } } } //uploadFileResultCallback is used as an example here. The printf statements can be replaced with custom logging print statements. void uploadFileResultCallback(obs_status status, char *resultMsg, int partCountReturn, obs_upload_file_part_info * uploadInfoList, void *callbackData) { int i = 0; obs_upload_file_part_info * pstUploadInfoList = uploadInfoList; printf("status return is %d(%s)\n", status, obs_get_status_name(status)); printf("%s", resultMsg); printf("partCount[%d]\n", partCountReturn); for (i = 0; i < partCountReturn; i++) { printf("partNum[%d],startByte[%llu],partSize[%llu],status[%d]\n", pstUploadInfoList->part_num, pstUploadInfoList->start_byte, pstUploadInfoList->part_size, pstUploadInfoList->status_return); pstUploadInfoList++; } if (callbackData) { obs_status* retStatus = (obs_status*)callbackData; (*retStatus) = status; } } static double g_progress = 0; void test_progress_callback(double progress, uint64_t uploadedSize, uint64_t fileTotalSize, void *callback_data) { if (progress == 100 || (g_progress < progress && progress - g_progress > 2)) { printf("test_progress_callback progress=%f uploadedSize=%llu fileTotalSize=%llu callback_data=%p\n", progress, uploadedSize, fileTotalSize, callback_data); g_progress = progress; } } |
Helpful Links
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.