Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Tcl) Frame.io - Upload an AssetUpload an asset to Frame.io For more information, see https://docs.frame.io/docs/uploading-assets
load ./chilkat.dll # This example assumes the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. set http [new_CkHttp] # 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" # } set localFilePath "qa_data/mp4/rotating_earth.mp4" set fac [new_CkFileAccess] set fileSize [CkFileAccess_FileSize $fac $localFilePath] set json [new_CkJsonObject] CkJsonObject_UpdateInt $json "filesize" $fileSize CkJsonObject_UpdateString $json "filetype" "video/mp4" CkJsonObject_UpdateString $json "name" "rotating_earth7" CkJsonObject_UpdateString $json "type" "file" CkHttp_SetRequestHeader $http "content-type" "application/json" # Adds the "Authorization: Bearer <FRAME_IO_DEV_TOKEN>" header. CkHttp_put_AuthToken $http "<FRAME_IO_DEV_TOKEN>" # Uploading to asset ID: 039845e8-bffe-4d6b-88d3-c780bae06342 # resp is a CkHttpResponse set resp [CkHttp_PostJson3 $http "https://api.frame.io/v2/assets/039845e8-bffe-4d6b-88d3-c780bae06342/children" "application/json" $json] if {[CkHttp_get_LastMethodSuccess $http] == 0} then { puts [CkHttp_lastErrorText $http] delete_CkHttp $http delete_CkFileAccess $fac delete_CkJsonObject $json exit } set sbResponseBody [new_CkStringBuilder] CkHttpResponse_GetBodySb $resp $sbResponseBody set jResp [new_CkJsonObject] CkJsonObject_LoadSb $jResp $sbResponseBody CkJsonObject_put_EmitCompact $jResp 0 puts "Response Body:" puts [CkJsonObject_emit $jResp] set respStatusCode [CkHttpResponse_get_StatusCode $resp] puts "Response Status Code = $respStatusCode" if {$respStatusCode >= 400} then { puts "Response Header:" puts [CkHttpResponse_header $resp] puts "Failed." delete_CkHttpResponse $resp delete_CkHttp $http delete_CkFileAccess $fac delete_CkJsonObject $json delete_CkStringBuilder $sbResponseBody delete_CkJsonObject $jResp exit } delete_CkHttpResponse $resp # 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. set numChunks [CkJsonObject_SizeOfArray $jResp "upload_urls"] set sizePerChunk [expr [expr $fileSize + [expr $numChunks - 1]] / $numChunks] puts "numChunks = $numChunks" puts "sizePerChunk = $sizePerChunk" set success [CkFileAccess_OpenForRead $fac $localFilePath] if {$success == 0} then { puts [CkFileAccess_lastErrorText $fac] delete_CkHttp $http delete_CkFileAccess $fac delete_CkJsonObject $json delete_CkStringBuilder $sbResponseBody delete_CkJsonObject $jResp exit } set bd [new_CkBinData] set httpForUpload [new_CkHttp] CkHttp_SetRequestHeader $httpForUpload "x-amz-acl" "private" set i 0 while {$i < $numChunks} { CkBinData_Clear $bd set success [CkFileAccess_ReadBlockBd $fac $i $sizePerChunk $bd] CkJsonObject_put_I $jResp $i set uploadUrl [CkJsonObject_stringOf $jResp "upload_urls[i]"] # Send the chunk in a PUT: puts "PUT chunk [expr $i + 1]" puts "URL: $uploadUrl" # PUT https://frameio-uploads-production.s3/etc/etc # Content-Type: video/mp4 # x-amz-acl: private set resp [CkHttp_PBinaryBd $httpForUpload "PUT" $uploadUrl $bd "video/mp4" 0 0] if {[CkHttp_get_LastMethodSuccess $httpForUpload] == 0} then { puts [CkHttp_lastErrorText $httpForUpload] delete_CkHttp $http delete_CkFileAccess $fac delete_CkJsonObject $json delete_CkStringBuilder $sbResponseBody delete_CkJsonObject $jResp delete_CkBinData $bd delete_CkHttp $httpForUpload exit } puts "response status: [CkHttpResponse_get_StatusCode $resp]" delete_CkHttpResponse $resp set i [expr $i + 1] } CkFileAccess_FileClose $fac puts "File uploaded." delete_CkHttp $http delete_CkFileAccess $fac delete_CkJsonObject $json delete_CkStringBuilder $sbResponseBody delete_CkJsonObject $jResp delete_CkBinData $bd delete_CkHttp $httpForUpload |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.