Visual FoxPro
Visual FoxPro
Frame.io - Upload an Asset
See more Frame.io Examples
Upload an asset to Frame.ioChilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loHttp
LOCAL lcLocalFilePath
LOCAL loFac
LOCAL lnFileSize
LOCAL loJson
LOCAL loResp
LOCAL loSbResponseBody
LOCAL loJResp
LOCAL lnRespStatusCode
LOCAL lnNumChunks
LOCAL lnSizePerChunk
LOCAL loBd
LOCAL loHttpForUpload
LOCAL i
LOCAL lcUploadUrl
lnSuccess = 0
* This example assumes the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.
loHttp = CreateObject('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"
* }
lcLocalFilePath = "qa_data/mp4/rotating_earth.mp4"
loFac = CreateObject('Chilkat.FileAccess')
lnFileSize = loFac.FileSize(lcLocalFilePath)
loJson = CreateObject('Chilkat.JsonObject')
loJson.UpdateInt("filesize",lnFileSize)
loJson.UpdateString("filetype","video/mp4")
loJson.UpdateString("name","rotating_earth7")
loJson.UpdateString("type","file")
loHttp.SetRequestHeader("content-type","application/json")
* Adds the "Authorization: Bearer <FRAME_IO_DEV_TOKEN>" header.
loHttp.AuthToken = "<FRAME_IO_DEV_TOKEN>"
* Uploading to asset ID: 039845e8-bffe-4d6b-88d3-c780bae06342
loResp = CreateObject('Chilkat.HttpResponse')
lnSuccess = loHttp.HttpJson("POST","https://api.frame.io/v2/assets/039845e8-bffe-4d6b-88d3-c780bae06342/children",loJson,"application/json",loResp)
IF (lnSuccess = 0) THEN
? loHttp.LastErrorText
RELEASE loHttp
RELEASE loFac
RELEASE loJson
RELEASE loResp
CANCEL
ENDIF
loSbResponseBody = CreateObject('Chilkat.StringBuilder')
loResp.GetBodySb(loSbResponseBody)
loJResp = CreateObject('Chilkat.JsonObject')
loJResp.LoadSb(loSbResponseBody)
loJResp.EmitCompact = 0
? "Response Body:"
? loJResp.Emit()
lnRespStatusCode = loResp.StatusCode
? "Response Status Code = " + STR(lnRespStatusCode)
IF (lnRespStatusCode >= 400) THEN
? "Response Header:"
? loResp.Header
? "Failed."
RELEASE loHttp
RELEASE loFac
RELEASE loJson
RELEASE loResp
RELEASE loSbResponseBody
RELEASE loJResp
CANCEL
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.
lnNumChunks = loJResp.SizeOfArray("upload_urls")
lnSizePerChunk = (lnFileSize + lnNumChunks - 1) / lnNumChunks
? "numChunks = " + STR(lnNumChunks)
? "sizePerChunk = " + STR(lnSizePerChunk)
lnSuccess = loFac.OpenForRead(lcLocalFilePath)
IF (lnSuccess = 0) THEN
? loFac.LastErrorText
RELEASE loHttp
RELEASE loFac
RELEASE loJson
RELEASE loResp
RELEASE loSbResponseBody
RELEASE loJResp
CANCEL
ENDIF
loBd = CreateObject('Chilkat.BinData')
loHttpForUpload = CreateObject('Chilkat.Http')
loHttpForUpload.SetRequestHeader("x-amz-acl","private")
i = 0
DO WHILE (i < lnNumChunks)
loBd.Clear()
lnSuccess = loFac.ReadBlockBd(i,lnSizePerChunk,loBd)
loJResp.I = i
lcUploadUrl = loJResp.StringOf("upload_urls[i]")
* Send the chunk in a PUT:
? "PUT chunk " + STR(i + 1)
? "URL: " + lcUploadUrl
* PUT https://frameio-uploads-production.s3/etc/etc
* Content-Type: video/mp4
* x-amz-acl: private
lnSuccess = loHttpForUpload.HttpBd("PUT",lcUploadUrl,loBd,"video/mp4",loResp)
IF (lnSuccess = 0) THEN
? loHttpForUpload.LastErrorText
RELEASE loHttp
RELEASE loFac
RELEASE loJson
RELEASE loResp
RELEASE loSbResponseBody
RELEASE loJResp
RELEASE loBd
RELEASE loHttpForUpload
CANCEL
ENDIF
? "response status: " + STR(loResp.StatusCode)
i = i + 1
ENDDO
loFac.FileClose()
? "File uploaded."
RELEASE loHttp
RELEASE loFac
RELEASE loJson
RELEASE loResp
RELEASE loSbResponseBody
RELEASE loJResp
RELEASE loBd
RELEASE loHttpForUpload