AutoIt
AutoIt
Frame.io - Upload an Asset
See more Frame.io Examples
Upload an asset to Frame.ioChilkat AutoIt Downloads
Local $bSuccess = False
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
$oHttp = ObjCreate("Chilkat.Http")
; Implements the following CURL command:
; curl --request POST \
; --url https://api.frame.io/v2/assets/<ASSET_ID>/children \
; --header 'authorization: Bearer <FRAME_IO_DEV_TOKEN>' \
; --header 'content-type: application/json' \
; --data '{"filesize":1570024 ,"filetype":"video/mp4","name":"rotating_earth","type":"file"}'
; Use the following online tool to generate HTTP code from a CURL command
; Convert a cURL Command to HTTP Source Code
; Use this online tool to generate code from sample JSON:
; Generate Code to Create JSON
; The following JSON is sent in the request body.
; {
; "filesize": 1570024,
; "filetype": "video/mp4",
; "name": "rotating_earth",
; "type": "file"
; }
Local $sLocalFilePath = "qa_data/mp4/rotating_earth.mp4"
$oFac = ObjCreate("Chilkat.FileAccess")
Local $iFileSize = $oFac.FileSize($sLocalFilePath)
$oJson = ObjCreate("Chilkat.JsonObject")
$oJson.UpdateInt("filesize",$iFileSize)
$oJson.UpdateString("filetype","video/mp4")
$oJson.UpdateString("name","rotating_earth7")
$oJson.UpdateString("type","file")
$oHttp.SetRequestHeader "content-type","application/json"
; Adds the "Authorization: Bearer <FRAME_IO_DEV_TOKEN>" header.
$oHttp.AuthToken = "<FRAME_IO_DEV_TOKEN>"
; Uploading to asset ID: 039845e8-bffe-4d6b-88d3-c780bae06342
$oResp = ObjCreate("Chilkat.HttpResponse")
$bSuccess = $oHttp.HttpJson("POST","https://api.frame.io/v2/assets/039845e8-bffe-4d6b-88d3-c780bae06342/children",$oJson,"application/json",$oResp)
If ($bSuccess = False) Then
ConsoleWrite($oHttp.LastErrorText & @CRLF)
Exit
EndIf
$oSbResponseBody = ObjCreate("Chilkat.StringBuilder")
$oResp.GetBodySb($oSbResponseBody)
$oJResp = ObjCreate("Chilkat.JsonObject")
$oJResp.LoadSb($oSbResponseBody)
$oJResp.EmitCompact = False
ConsoleWrite("Response Body:" & @CRLF)
ConsoleWrite($oJResp.Emit() & @CRLF)
Local $iRespStatusCode = $oResp.StatusCode
ConsoleWrite("Response Status Code = " & $iRespStatusCode & @CRLF)
If ($iRespStatusCode >= 400) Then
ConsoleWrite("Response Header:" & @CRLF)
ConsoleWrite($oResp.Header & @CRLF)
ConsoleWrite("Failed." & @CRLF)
Exit
EndIf
; Upload in chunks to the pre-signed S3 upload URLs.
; There are ways to do this in parallel, but for simplicity we'll show how to upload
; one chunk after another.
Local $iNumChunks = $oJResp.SizeOfArray("upload_urls")
Local $iSizePerChunk = ($iFileSize + $iNumChunks - 1) / $iNumChunks
ConsoleWrite("numChunks = " & $iNumChunks & @CRLF)
ConsoleWrite("sizePerChunk = " & $iSizePerChunk & @CRLF)
$bSuccess = $oFac.OpenForRead($sLocalFilePath)
If ($bSuccess = False) Then
ConsoleWrite($oFac.LastErrorText & @CRLF)
Exit
EndIf
$oBd = ObjCreate("Chilkat.BinData")
$oHttpForUpload = ObjCreate("Chilkat.Http")
$oHttpForUpload.SetRequestHeader "x-amz-acl","private"
Local $i = 0
While ($i < $iNumChunks)
$oBd.Clear()
$bSuccess = $oFac.ReadBlockBd($i,$iSizePerChunk,$oBd)
$oJResp.I = $i
Local $sUploadUrl = $oJResp.StringOf("upload_urls[i]")
; Send the chunk in a PUT:
ConsoleWrite("PUT chunk " & ($i + 1) & @CRLF)
ConsoleWrite("URL: " & $sUploadUrl & @CRLF)
; PUT https://frameio-uploads-production.s3/etc/etc
; Content-Type: video/mp4
; x-amz-acl: private
$bSuccess = $oHttpForUpload.HttpBd("PUT",$sUploadUrl,$oBd,"video/mp4",$oResp)
If ($bSuccess = False) Then
ConsoleWrite($oHttpForUpload.LastErrorText & @CRLF)
Exit
EndIf
ConsoleWrite("response status: " & $oResp.StatusCode & @CRLF)
$i = $i + 1
Wend
$oFac.FileClose
ConsoleWrite("File uploaded." & @CRLF)