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
(DataFlex) Google Drive - Resumable UploadDemonstrates how to do a resumable upload to Google Drive. For more information, see https://developers.google.com/drive/api/v3/manage-uploads#resumable
Use ChilkatAx-win32.pkg Procedure Test Boolean iSuccess Handle hoHttp Variant vJson Handle hoJson Variant vResp Handle hoResp Integer iStatusCode Handle hoSbSessionUri String sSessionUri Variant vReq Handle hoReq Handle hoUrl String sTemp1 Integer iTemp1 Boolean bTemp1 // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. Move True To iSuccess // This example uses a previously obtained access token having permission for the // Google Drive scope. // See Get Google Drive OAuth2 Access Token Get Create (RefClass(cComChilkatHttp)) To hoHttp If (Not(IsComObjectCreated(hoHttp))) Begin Send CreateComObject of hoHttp End Set ComAuthToken Of hoHttp To "GOOGLE_DRIVE_ACCESS_TOKEN" // First we want to initiate the resumable upload. // We send a POST to get a session URI, which will be used to upload the file, and resume if needed. // Our POST will look like this: // POST https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable HTTP/1.1 // Authorization: Bearer [YOUR_AUTH_TOKEN] <-- Chilkat automatically adds this header because the AuthToken property was set. // Content-Length: 38 <-- Chilkat will automatically add this header. // Content-Type: application/json; charset=UTF-8 <-- This is the type of this POST, and is specified in the call to PostJson3. // X-Upload-Content-Type: application/zip <-- The type of file we'll be uploading // X-Upload-Content-Length: 1366807 <-- The size of the file we'll be uploading // // { // "name": "myObject" // } Send ComSetRequestHeader To hoHttp "X-Upload-Content-Type" "application/zip" Send ComSetRequestHeader To hoHttp "X-Upload-Content-Length" "1366807" Get Create (RefClass(cComChilkatJsonObject)) To hoJson If (Not(IsComObjectCreated(hoJson))) Begin Send CreateComObject of hoJson End Get ComUpdateString Of hoJson "name" "myZip" To iSuccess Get pvComObject of hoJson to vJson Get ComPostJson3 Of hoHttp "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable" "application/json" vJson To vResp If (IsComObject(vResp)) Begin Get Create (RefClass(cComChilkatHttpResponse)) To hoResp Set pvComObject Of hoResp To vResp End Get ComLastMethodSuccess Of hoHttp To bTemp1 If (bTemp1 = False) Begin Get ComLastErrorText Of hoHttp To sTemp1 Showln sTemp1 Procedure_Return End Get ComStatusCode Of hoResp To iStatusCode If (iStatusCode <> 200) Begin Get ComBodyStr Of hoResp To sTemp1 Showln sTemp1 Showln "response status = " iStatusCode Procedure_Return End // The session URI is in the "Location" response header: Get Create (RefClass(cComChilkatStringBuilder)) To hoSbSessionUri If (Not(IsComObjectCreated(hoSbSessionUri))) Begin Send CreateComObject of hoSbSessionUri End Get ComGetHeaderField Of hoResp "Location" To sTemp1 Get ComAppend Of hoSbSessionUri sTemp1 To iSuccess Get ComGetAsString Of hoSbSessionUri To sSessionUri Showln "Session URI: " sSessionUri Send Destroy of hoResp // Here's a sample session URI: https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&upload_id=AEnB2UrszR8lDqlo3mtXJw_0rYI_Hi1oVh1NPFcLfoyBq9NcSjk85kFopoZaVEgT38OSmLl0XsObPf4iCSJwHlrOvvIJQ_ckIQ // ----------------------------------------------------------------------------- // The next step is to upload the file using the session URI: // We'll send a PUT that looks like this: // PUT https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&upload_id=xa298sd_sdlkj2 HTTP/1.1 // Content-Length: 1366807 // Content-Type: application/zip // // [BYTES 0-1366806] // First remove the X-Upload-Content-Type and X-Upload-Content-Length request headers we specified earlier, so they don't get sent with subsequent requests. Send ComClearHeaders To hoHttp // Because the file is likely large, we'll use SynchronousRequest which allows to to pass an HTTP request object where the body can be streamed directly from a file. Get Create (RefClass(cComChilkatHttpRequest)) To hoReq If (Not(IsComObjectCreated(hoReq))) Begin Send CreateComObject of hoReq End Set ComContentType Of hoReq To "application/zip" Set ComHttpVerb Of hoReq To "PUT" Get Create (RefClass(cComChilkatUrl)) To hoUrl If (Not(IsComObjectCreated(hoUrl))) Begin Send CreateComObject of hoUrl End Get ComParseUrl Of hoUrl sSessionUri To iSuccess Get ComPathWithQueryParams Of hoUrl To sTemp1 Set ComPath Of hoReq To sTemp1 Get ComPathWithQueryParams Of hoUrl To sTemp1 Showln "Path with Query Param: " sTemp1 // Specify that the request body is to be streamed directly from a file. Get ComStreamBodyFromFile Of hoReq "qa_data/zips/big.zip" To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoReq To sTemp1 Showln sTemp1 Procedure_Return End Get ComHost Of hoUrl To sTemp1 Get ComPort Of hoUrl To iTemp1 Get ComSsl Of hoUrl To bTemp1 Get pvComObject of hoReq to vReq Get ComSynchronousRequest Of hoHttp sTemp1 iTemp1 bTemp1 vReq To vResp If (IsComObject(vResp)) Begin Get Create (RefClass(cComChilkatHttpResponse)) To hoResp Set pvComObject Of hoResp To vResp End Get ComLastMethodSuccess Of hoHttp To bTemp1 If (bTemp1 = False) Begin Get ComLastErrorText Of hoHttp To sTemp1 Showln sTemp1 Procedure_Return End Get ComBodyStr Of hoResp To sTemp1 Showln sTemp1 Showln "response status = " iStatusCode // Sample output: // { // "kind": "drive#file", // "id": "1rx20i53eurtkVQ-RT7Ry8Ct85PgPYMET", // "name": "myZip", // "mimeType": "application/zip" // } // // response status = 200 Send Destroy of hoResp End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.