Sample code for 30+ languages & platforms
AutoIt

Frame.io - Upload an Asset

See more Frame.io Examples

Upload an asset to Frame.io

Chilkat AutoIt Downloads

AutoIt
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)