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 determined the region where the VOD service for uploading media files is located. See Endpoints.
- You have obtained the ID of the project. For details, see Obtaining a Project ID.
- The video file to be uploaded has been split into binary streams. The size of each part cannot exceed 20 MB.
Overall Process
- Obtain a user token
- Create a VOD media file
- Obtain the authorization for initializing an upload task
- Initialize an upload task
- Obtain the authorization for multi-part upload
- Upload a video by part
- Refer to 5 to 6 to upload all videos by part.
- Obtain the authorization for listing the uploaded parts
- Obtain the uploaded parts
- Obtain the authorization for merging parts
- Merge the uploaded parts
- Confirm media file 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 files to VOD to create a media file.
- 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 file parameters are configured in the example. You can configure all parameters by referring to the API for uploading media files to VOD.
- If the request is successful, the media file 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 multi-part upload to obtain the 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 multi-part 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 a media 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 multi-part upload task to initialize the multi-part upload task.
- 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 multi-part upload to obtain the authorization for initializing a multi-part upload task.
- 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 multi-part 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 multi-part 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 multi-part upload API of OBS to upload the first part of the video file.
- 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 multi-part upload to obtain the 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.
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>
- Select the GET request method and enter the authorized URI returned in 8.c.
- Call the API for obtaining authorization for multi-part upload to obtain the 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.
- 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 the media file upload to confirm the media file 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 file ID is returned.
{ "asset_id": "fea62a2845e43c37b4cbfb017c0d0821" }
- Select the POST request method and enter the URI.
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