Sample code for 30+ languages & platforms
PowerBuilder

Frame.io - Upload an Asset

See more Frame.io Examples

Upload an asset to Frame.io

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
integer li_Success
oleobject loo_Http
string ls_LocalFilePath
oleobject loo_Fac
integer li_FileSize
oleobject loo_Json
oleobject loo_Resp
oleobject loo_SbResponseBody
oleobject loo_JResp
integer li_RespStatusCode
integer li_NumChunks
integer li_SizePerChunk
oleobject loo_Bd
oleobject loo_HttpForUpload
integer i
string ls_UploadUrl

li_Success = 0

// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

loo_Http = create oleobject
li_rc = loo_Http.ConnectToNewObject("Chilkat.Http")
if li_rc < 0 then
    destroy loo_Http
    MessageBox("Error","Connecting to COM object failed")
    return
end if

// 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"
// }

ls_LocalFilePath = "qa_data/mp4/rotating_earth.mp4"
loo_Fac = create oleobject
li_rc = loo_Fac.ConnectToNewObject("Chilkat.FileAccess")

li_FileSize = loo_Fac.FileSize(ls_LocalFilePath)

loo_Json = create oleobject
li_rc = loo_Json.ConnectToNewObject("Chilkat.JsonObject")

loo_Json.UpdateInt("filesize",li_FileSize)
loo_Json.UpdateString("filetype","video/mp4")
loo_Json.UpdateString("name","rotating_earth7")
loo_Json.UpdateString("type","file")

loo_Http.SetRequestHeader("content-type","application/json")
// Adds the "Authorization: Bearer <FRAME_IO_DEV_TOKEN>" header.
loo_Http.AuthToken = "<FRAME_IO_DEV_TOKEN>"

// Uploading to asset ID: 039845e8-bffe-4d6b-88d3-c780bae06342
loo_Resp = create oleobject
li_rc = loo_Resp.ConnectToNewObject("Chilkat.HttpResponse")

li_Success = loo_Http.HttpJson("POST","https://api.frame.io/v2/assets/039845e8-bffe-4d6b-88d3-c780bae06342/children",loo_Json,"application/json",loo_Resp)
if li_Success = 0 then
    Write-Debug loo_Http.LastErrorText
    destroy loo_Http
    destroy loo_Fac
    destroy loo_Json
    destroy loo_Resp
    return
end if

loo_SbResponseBody = create oleobject
li_rc = loo_SbResponseBody.ConnectToNewObject("Chilkat.StringBuilder")

loo_Resp.GetBodySb(loo_SbResponseBody)
loo_JResp = create oleobject
li_rc = loo_JResp.ConnectToNewObject("Chilkat.JsonObject")

loo_JResp.LoadSb(loo_SbResponseBody)
loo_JResp.EmitCompact = 0

Write-Debug "Response Body:"
Write-Debug loo_JResp.Emit()

li_RespStatusCode = loo_Resp.StatusCode
Write-Debug "Response Status Code = " + string(li_RespStatusCode)
if li_RespStatusCode >= 400 then
    Write-Debug "Response Header:"
    Write-Debug loo_Resp.Header
    Write-Debug "Failed."
    destroy loo_Http
    destroy loo_Fac
    destroy loo_Json
    destroy loo_Resp
    destroy loo_SbResponseBody
    destroy loo_JResp
    return
end if

// 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.
li_NumChunks = loo_JResp.SizeOfArray("upload_urls")
li_SizePerChunk = (li_FileSize + li_NumChunks - 1) / li_NumChunks

Write-Debug "numChunks = " + string(li_NumChunks)
Write-Debug "sizePerChunk = " + string(li_SizePerChunk)

li_Success = loo_Fac.OpenForRead(ls_LocalFilePath)
if li_Success = 0 then
    Write-Debug loo_Fac.LastErrorText
    destroy loo_Http
    destroy loo_Fac
    destroy loo_Json
    destroy loo_Resp
    destroy loo_SbResponseBody
    destroy loo_JResp
    return
end if

loo_Bd = create oleobject
li_rc = loo_Bd.ConnectToNewObject("Chilkat.BinData")

loo_HttpForUpload = create oleobject
li_rc = loo_HttpForUpload.ConnectToNewObject("Chilkat.Http")

loo_HttpForUpload.SetRequestHeader("x-amz-acl","private")

i = 0
do while (i < li_NumChunks)
    loo_Bd.Clear()
    li_Success = loo_Fac.ReadBlockBd(i,li_SizePerChunk,loo_Bd)

    loo_JResp.I = i
    ls_UploadUrl = loo_JResp.StringOf("upload_urls[i]")

    // Send the chunk in a PUT:

    Write-Debug "PUT chunk " + string(i + 1)
    Write-Debug "URL: " + ls_UploadUrl

    // PUT https://frameio-uploads-production.s3/etc/etc
    // Content-Type: video/mp4
    // x-amz-acl: private
    li_Success = loo_HttpForUpload.HttpBd("PUT",ls_UploadUrl,loo_Bd,"video/mp4",loo_Resp)
    if li_Success = 0 then
        Write-Debug loo_HttpForUpload.LastErrorText
        destroy loo_Http
        destroy loo_Fac
        destroy loo_Json
        destroy loo_Resp
        destroy loo_SbResponseBody
        destroy loo_JResp
        destroy loo_Bd
        destroy loo_HttpForUpload
        return
    end if

    Write-Debug "response status: " + string(loo_Resp.StatusCode)

    i = i + 1
loop

loo_Fac.FileClose()

Write-Debug "File uploaded."


destroy loo_Http
destroy loo_Fac
destroy loo_Json
destroy loo_Resp
destroy loo_SbResponseBody
destroy loo_JResp
destroy loo_Bd
destroy loo_HttpForUpload