Example 2: Uploading a Media File Greater Than 20 MB by Part
Scenario
Example 1: Uploading a Media File Less Than 20 MB has described how to upload a media file less than 20 MB to VOD. If you need to upload a media file greater than 20 MB, you can call VOD APIs to upload the file by part.
This section describes how to upload a video file greater than 20 MB by calling APIs.
Prerequisites
- You have specified the region where the VOD service for uploading media assets is located. See Before You Start.
- You have obtained the ID of the project by referring to Obtaining a Project ID.
- The video file to be uploaded has been split into binary streams. The recommended size of each part cannot exceed 20 MB.
- The OBS API for listing uploaded parts allows for 1 to 10,000 parts and 100 KB to 5 GB for each part. By default, a response to a maximum of 1,000 parts can be returned. If there are more than 1,000 parts, you need to call the API by referring to listing uploaded parts.
Overall Process
- Obtain a user token
- Create a VOD media asset
- Obtain authorization for initializing an upload task
- Initialize an upload task
- Obtain authorization for multipart upload
- Upload a video by part
- Refer to 5 to 6 to upload all videos by part.
- Obtain authorization for listing uploaded parts
- Obtain uploaded parts
- Obtain authorization for merging parts
- Merge uploaded parts
- Confirm media asset upload
Procedure
- Obtain a user token and use it to authenticate the calling of VOD APIs.
For details, see Making an API Request. CN North-Beijing4 is used as an example. If you need to call a VOD API in another region, replace the endpoint with the IAM endpoint of the corresponding region.
POST https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "password", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "projectname" } } } }
As shown in Figure 2, information in the red box indicates the user token. - Call the API for uploading media assets to VOD to create a media asset.
- Select the POST request method and enter the URI.
https://vod.cn-north-4.myhuaweicloud.com/v1.0/{project_id}/asset
- In the request header, add X-Auth-Token and set its value to the token obtained in 1.
- Specify the following parameters in the request body:
{ "title": "testVideo", "description": "test", "category_id": 87748, "video_name": "test.mp4", "video_type": "MP4", "auto_publish": 0 }
Only some media asset parameters are configured in the example. You can configure all parameters by referring to the API for uploading media assets to VOD.
- If the request is successful, the media asset ID, video upload URL, and information about the OBS bucket that stores the video file are returned.
{ "asset_id": "fea62a2845e43c37b4cbfb017c0d0821", "video_upload_url": "https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4?AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596700132&Signature=GiHTcO2avO9B84sH8A5wL2GieCI%3D", "cover_upload_url": null, "subtitle_upload_urls": [], "target": { "bucket": "vod-bucket-65-cn-north-4", "location": "cn-north-4", "object": "05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4" } }
- Select the POST request method and enter the URI.
- Call the API for obtaining authorization for multipart upload to obtain authorization for initializing an upload task from OBS.
- Select the GET request method and enter the request URI.
https://vod.cn-north-4.myhuaweicloud.com/v1.1/{project_id}/asset/authority?http_verb=POST&content_type=video/mp4&bucket=vod-bucket-65-cn-north-4&object_key=05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4
- http_verb: HTTP method for calling the OBS API for multipart upload. For details about the suitable HTTP method, see OBS API Reference.
- content_type: HTTP Content-type of a certain file type. You need to configure this parameter based on the type of the uploaded file.
- Video file: video/video format, for example, video/mp4. For details about how to fill in the request header of a video file format, see Table 1.
- Audio file: audio/audio format, for example, audio/mp3. For details about how to fill in the request header of an audio file format, see Table 2.
- Image file: image/image format, for example, image/png.
- Subtitle file: application/octet-stream
- bucket: OBS bucket for storing video files. It corresponds to the bucket field returned in 2.d.
- object_key: name of the object in the OBS bucket. It corresponds to the object field returned in 2.d.
Table 1 Parameters in the request header of a video file File Name Extension
Content-Type
MP4
video/mp4
MOV
video/quicktime
MXF
application/mxf
TS
video/mp2t
MPG
video/mpeg
FLV
video/flv
WMV
video/x-ms-wmv
AVI
video/x-msvideo
M4V
video/m4v
F4V
application/f4v
MPEG
video/mpeg
M3U8
application/octet-stream
_3GP/3GP
video/3gpp
ASF
video/x-ms-asf
MKV
video/x-matroska
WEBM
video/webm
MPD
video/dash
- In the request header, add X-Auth-Token and set its value to the token obtained in 1.
- If the request is successful, information about the authorization is returned.
{ "sign_str": "https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4?uploads&AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596706429&Signature=5D15iJUcTkoWLpE2vn54FQZskXA%3D" }
- Select the GET request method and enter the request URI.
- Call the OBS API for initializing a multipart upload task.
OBS does not support verification on API Explorer. You need to use a third-party tool, such as Postman, to construct a request for verification.
- Select the POST request method and enter the authorized URI returned in 3.c.
https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4?uploads&AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596706429&Signature=5D15iJUcTkoWLpE2vn54FQZskXA%3D
- Add Content-Type to the request header and configure this parameter based on the format of the uploaded video. For details, see 3.
- If the request is successful, the initialization information is returned.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <InitiateMultipartUploadResult xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/"> <Bucket>vod-bucket-65-cn-north-4</Bucket> <Key>05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4</Key> <UploadId>00000173C2ED862344C835374DFE33C8</UploadId> </InitiateMultipartUploadResult>
- Select the POST request method and enter the authorized URI returned in 3.c.
- Call the API for obtaining authorization for multipart upload.
- Select the GET request method and enter the request URI.
https://vod.cn-north-4.myhuaweicloud.com/v1.1/{project_id}/asset/authority?http_verb=PUT&content_type=video/mp4&bucket=vod-bucket-65-cn-north-4&object_key=05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4&content_md5=hHZXtgjYL2fmLpu%2byQ%2bXgg%3d%3d&upload_id=00000173C2ED862344C835374DFE33C8&part_number=1
- http_verb: The HTTP method for multipart upload is PUT.
- content_type: HTTP Content-type of a certain file type. You need to configure this parameter based on the type of the uploaded file. For details, see 3.
- bucket: OBS bucket for storing video files. It corresponds to the bucket field returned in 2.d.
- object_key: name of the object in the OBS bucket. It corresponds to the object field returned in 2.d.
- content_md5: MD5 value of each video part. This parameter is mandatory. For details about how to generate an MD5 value, see Generating an MD5 Value. Note: If there are special characters in the request, escape them.
- upload_id: ID of the upload task, which is the UploadId field returned in 4.c.
- part_number: number of an uploaded part
- In the request header, add X-Auth-Token and set its value to the token obtained in 1.
- If the request is successful, information about the authorization for multipart upload is returned.
{ "sign_str": "https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4?AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596708691&partNumber=1&uploadId=00000173C2ED862344C835374DFE33C8&Signature=cjw3CmUFeNBFAuLWBTsPRp9NfsQ%3D" }
- Select the GET request method and enter the request URI.
- Call the OBS API for multipart upload to upload the first part of the video file.
OBS does not support verification on API Explorer. You need to use a third-party tool, such as Postman, to construct a request for verification.
- Select the PUT request method and enter the authorized URI returned in 5.c.
https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4?AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596708691&partNumber=1&uploadId=00000173C2ED862344C835374DFE33C8&Signature=cjw3CmUFeNBFAuLWBTsPRp9NfsQ%3D
- Add Content-Type to the request header and set the parameter to application/octet-stream. If content_md5 has been configured in 5.a, Content-MD5 must be added to the request header and set to the MD5 value of the corresponding part (escaping is not required). Otherwise, the upload will fail.
- In the request body, the first part of the video file is uploaded in binary streams.
- If the request is successful, the status code 200 OK is returned.
- Select the PUT request method and enter the authorized URI returned in 5.c.
- Repeat 5 to 6 to upload all parts of the video file.
- Call the API for obtaining authorization for multipart upload to obtain authorization for listing uploaded parts.
- Select the GET request method and enter the request URI.
https://vod.cn-north-4.myhuaweicloud.com/v1.1/{project_id}/asset/authority?http_verb=GET&bucket=vod-bucket-65-cn-north-4&object_key=05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4&upload_id=000001717E28524B44CEFF2C2CE1B06A
- http_verb: The HTTP method for listing uploaded parts is GET.
- bucket: OBS bucket for storing video files. It corresponds to the bucket field returned in 2.d.
- object_key: name of the object in the OBS bucket. It corresponds to the object field returned in 2.d.
- upload_id: ID of the upload task, which is the UploadId field returned in 4.c.
- In the request header, add X-Auth-Token and set its value to the token obtained in 1.
- If the request is successful, information about the authorization for listing the uploaded parts is returned.
{ "sign_str": "https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4?AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596710054&uploadId=000001717E28524B44CEFF2C2CE1B06A&Signature=G5EOUr488cyPIretp8lgQZmpPw0%3D" }
- Select the GET request method and enter the request URI.
- Call the OBS API for listing uploaded parts to obtain information about all uploaded parts of the video file.
- The OBS API for listing uploaded parts allows for 1 to 10,000 parts and 100 KB to 5 GB for each part. By default, a response to a maximum of 1,000 parts can be returned. If there are more than 1,000 parts, you need to call the API by referring to listing uploaded parts.
- OBS does not support verification on API Explorer. You need to use a third-party tool, such as Postman, to construct a request for verification.
Note: The Content-Type attribute in the request header is set to null or is not carried.
- Select the GET request method and enter the authorized URI returned in 8.c.
https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4?AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596710054&uploadId=000001717E28524B44CEFF2C2CE1B06A&Signature=G5EOUr488cyPIretp8lgQZmpPw0%3D
- If the request is successful, information about the uploaded parts is returned.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ListPartsResult xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/"> <Bucket>vod-bucket-65-cn-north-4</Bucket> <Key>05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4</Key> <UploadId>00000173C2ED862344C835374DFE33C8</UploadId> <Initiator> <ID>d9235b9f3cf549499924f6de095241af:a96ecebcb3994e34b074e48f3dfc8237</ID> <DisplayName>xxx</DisplayName> </Initiator> <Owner> <ID>d9235b9f3cf549499924f6de095241af</ID> <DisplayName>xxx</DisplayName> </Owner> <StorageClass>STANDARD</StorageClass> <PartNumberMarker>0</PartNumberMarker> <NextPartNumberMarker>4</NextPartNumberMarker> <MaxParts>1000</MaxParts> <IsTruncated>false</IsTruncated> <Part> <PartNumber>1</PartNumber> <LastModified>2020-08-06T09:05:10.192Z</LastModified> <ETag>"847657b608d82f67e62e9bbec90f9782"</ETag> <Size>10000000</Size> </Part> <Part> <PartNumber>2</PartNumber> <LastModified>2020-08-06T08:02:02.821Z</LastModified> <ETag>"9a6a36ed9086a3a2fea130220e1e809c"</ETag> <Size>10000000</Size> </Part> <Part> <PartNumber>3</PartNumber> <LastModified>2020-08-06T08:04:19.711Z</LastModified> <ETag>"3a3afe552832bee0faf081c1e720067e"</ETag> <Size>10000000</Size> </Part> <Part> <PartNumber>4</PartNumber> <LastModified>2020-08-06T07:23:17.160Z</LastModified> <ETag>"6335af859c20ccef26b27ea691e7ecf7"</ETag> <Size>7472445</Size> </Part> </ListPartsResult>
- Call the API for obtaining authorization for multipart upload to obtain authorization for merging uploaded parts.
- Select the GET request method and enter the request URI.
https://vod.cn-north-4.myhuaweicloud.com/v1.1/{project_id}/asset/authority?http_verb=POST&bucket=vod-bucket-65-cn-north-4&object_key=05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4&upload_id=00000173C2ED862344C835374DFE33C8
- http_verb: The HTTP method for merging parts is POST.
- bucket: OBS bucket for storing video files. It corresponds to the bucket field returned in 2.d.
- object_key: name of the object in the OBS bucket. It corresponds to the object field returned in 2.d.
- upload_id: ID of the upload task, which is the UploadId field returned in 4.c.
- In the request header, add X-Auth-Token and set its value to the token obtained in 1.
- If the request is successful, information about the authorization for merging uploaded parts is returned.
{ "sign_str": "https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4?AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596709340&uploadId=000001717E28524B44CEFF2C2CE1B06A&Signature=Pa6IaMbH1Ofa0Vi%2BCbkdgmWzm70%3D" }
- Select the GET request method and enter the request URI.
- Call the OBS API for merging parts to merge the uploaded parts into a video file.
OBS does not support verification on API Explorer. You need to use a third-party tool, such as Postman, to construct a request for verification.
- Select the POST request method and enter the authorized URI returned in 10.c.
https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4?AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596708691&partNumber=1&uploadId=00000173C2ED862344C835374DFE33C8&Signature=cjw3CmUFeNBFAuLWBTsPRp9NfsQ%3D
- Add Content-Type to the request header and set the parameter to application/xml.
- Specify the following parameters in the request body:
<CompleteMultipartUpload> <Part> <PartNumber>1</PartNumber> <ETag>"847657b608d82f67e62e9bbec90f9782"</ETag> </Part> <Part> <PartNumber>2</PartNumber> <ETag>"9a6a36ed9086a3a2fea130220e1e809c"</ETag> </Part> <Part> <PartNumber>3</PartNumber> <ETag>"3a3afe552832bee0faf081c1e720067e"</ETag> </Part> <Part> <PartNumber>4</PartNumber> <ETag>"6335af859c20ccef26b27ea691e7ecf7"</ETag> </Part> </CompleteMultipartUpload>
- PartNumber: number of an uploaded part
- ETag: ETag value returned after a video part has been uploaded. The returned information in 9.b contains the ETag value of each part.
- If the request is successful, information about the merged parts is returned.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <CompleteMultipartUploadResult xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/"> <Location>05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4</Location> <Bucket>vod-bucket-65-cn-north-4</Bucket> <Key>05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4</Key> <ETag>"87f450dd18b666dfcdf902ac6b162b5a-4"</ETag> </CompleteMultipartUploadResult>
- Select the POST request method and enter the authorized URI returned in 10.c.
- Call the API for confirming media asset upload.
- Select the POST request method and enter the URI.
https://vod.cn-north-4.myhuaweicloud.com/v1.0/{project_id}/asset/status/uploaded
- In the request header, add X-Auth-Token and set its value to the token obtained in 1.
- Specify the following parameters in the request body:
{ "asset_id": "fea62a2845e43c37b4cbfb017c0d0821", "status":"CREATED" }
- If the request is successful, the media asset ID is returned.
{ "asset_id": "fea62a2845e43c37b4cbfb017c0d0821" }
- Select the POST request method and enter the URI.
Sample Code of Multipart Upload Using JavaScript
See JavaScript.
Sample Code of Multipart Upload Using Python
See Python.
Sample Code of Multipart Upload Using Go
See Go.
Sample Code of Multipart Upload Using PHP
See PHP.
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot