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
(C) Frame.io - Upload an AssetUpload an asset to Frame.io For more information, see https://docs.frame.io/docs/uploading-assets
#include <C_CkHttp.h> #include <C_CkFileAccess.h> #include <C_CkJsonObject.h> #include <C_CkHttpResponse.h> #include <C_CkStringBuilder.h> #include <C_CkBinData.h> void ChilkatSample(void) { HCkHttp http; BOOL success; const char *localFilePath; HCkFileAccess fac; int fileSize; HCkJsonObject json; HCkHttpResponse resp; HCkStringBuilder sbResponseBody; HCkJsonObject jResp; int respStatusCode; int numChunks; int sizePerChunk; HCkBinData bd; HCkHttp httpForUpload; int i; const char *uploadUrl; // This example assumes the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. http = CkHttp_Create(); // 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" // } localFilePath = "qa_data/mp4/rotating_earth.mp4"; fac = CkFileAccess_Create(); fileSize = CkFileAccess_FileSize(fac,localFilePath); json = CkJsonObject_Create(); 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_putAuthToken(http,"<FRAME_IO_DEV_TOKEN>"); // Uploading to asset ID: 039845e8-bffe-4d6b-88d3-c780bae06342 resp = CkHttp_PostJson3(http,"https://api.frame.io/v2/assets/039845e8-bffe-4d6b-88d3-c780bae06342/children","application/json",json); if (CkHttp_getLastMethodSuccess(http) == FALSE) { printf("%s\n",CkHttp_lastErrorText(http)); CkHttp_Dispose(http); CkFileAccess_Dispose(fac); CkJsonObject_Dispose(json); return; } sbResponseBody = CkStringBuilder_Create(); CkHttpResponse_GetBodySb(resp,sbResponseBody); jResp = CkJsonObject_Create(); CkJsonObject_LoadSb(jResp,sbResponseBody); CkJsonObject_putEmitCompact(jResp,FALSE); printf("Response Body:\n"); printf("%s\n",CkJsonObject_emit(jResp)); respStatusCode = CkHttpResponse_getStatusCode(resp); printf("Response Status Code = %d\n",respStatusCode); if (respStatusCode >= 400) { printf("Response Header:\n"); printf("%s\n",CkHttpResponse_header(resp)); printf("Failed.\n"); CkHttpResponse_Dispose(resp); CkHttp_Dispose(http); CkFileAccess_Dispose(fac); CkJsonObject_Dispose(json); CkStringBuilder_Dispose(sbResponseBody); CkJsonObject_Dispose(jResp); return; } CkHttpResponse_Dispose(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. numChunks = CkJsonObject_SizeOfArray(jResp,"upload_urls"); sizePerChunk = (fileSize + numChunks - 1) / numChunks; printf("numChunks = %d\n",numChunks); printf("sizePerChunk = %d\n",sizePerChunk); success = CkFileAccess_OpenForRead(fac,localFilePath); if (success == FALSE) { printf("%s\n",CkFileAccess_lastErrorText(fac)); CkHttp_Dispose(http); CkFileAccess_Dispose(fac); CkJsonObject_Dispose(json); CkStringBuilder_Dispose(sbResponseBody); CkJsonObject_Dispose(jResp); return; } bd = CkBinData_Create(); httpForUpload = CkHttp_Create(); CkHttp_SetRequestHeader(httpForUpload,"x-amz-acl","private"); i = 0; while ((i < numChunks)) { CkBinData_Clear(bd); success = CkFileAccess_ReadBlockBd(fac,i,sizePerChunk,bd); CkJsonObject_putI(jResp,i); uploadUrl = CkJsonObject_stringOf(jResp,"upload_urls[i]"); // Send the chunk in a PUT: printf("PUT chunk %d\n",i + 1); printf("URL: %s\n",uploadUrl); // PUT https://frameio-uploads-production.s3/etc/etc // Content-Type: video/mp4 // x-amz-acl: private resp = CkHttp_PBinaryBd(httpForUpload,"PUT",uploadUrl,bd,"video/mp4",FALSE,FALSE); if (CkHttp_getLastMethodSuccess(httpForUpload) == FALSE) { printf("%s\n",CkHttp_lastErrorText(httpForUpload)); CkHttp_Dispose(http); CkFileAccess_Dispose(fac); CkJsonObject_Dispose(json); CkStringBuilder_Dispose(sbResponseBody); CkJsonObject_Dispose(jResp); CkBinData_Dispose(bd); CkHttp_Dispose(httpForUpload); return; } printf("response status: %d\n",CkHttpResponse_getStatusCode(resp)); CkHttpResponse_Dispose(resp); i = i + 1; } CkFileAccess_FileClose(fac); printf("File uploaded.\n"); CkHttp_Dispose(http); CkFileAccess_Dispose(fac); CkJsonObject_Dispose(json); CkStringBuilder_Dispose(sbResponseBody); CkJsonObject_Dispose(jResp); CkBinData_Dispose(bd); CkHttp_Dispose(httpForUpload); } |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.