Sample code for 30+ languages & platforms
Lua

Download Binary File to In-Memory Bytes

See more Google Drive Examples

This example demonstrates how to download the binary content of a file from Google Drive directly into local memory.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

local success = true

-- It requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.

-- This example uses a previously obtained access token having permission for the
-- Google Drive scope.

local gAuth = chilkat.AuthGoogle.new()
gAuth.access_token = "GOOGLE-DRIVE-ACCESS-TOKEN"

local rest = chilkat.Rest.new()

-- Connect using TLS.
-- A single REST object, once connected, can be used for many Google Drive REST API calls.
-- The auto-reconnect indicates that if the already-established HTTPS connection is closed,
-- then it will be automatically re-established as needed.
local bAutoReconnect = true
success = rest:connect("www.googleapis.com", 443, true, bAutoReconnect)

-- Provide the authentication credentials (i.e. the access token)
rest:set_auth_google(gAuth)

-- ------------------------------------------------------------------------------
-- To download a file, we must know the file ID.
-- In a previous example (see Build Local Metadata Cache
-- we built a local cache to make it easy to lookup file IDs given a file path.
-- Let's say we want to download "testFolder/abc/123/penguins.jpg".
-- First we lookup the fileId in the cache.  With the fileId, we can download the file.
local gdCache = chilkat.Cache.new()
gdCache.level = 0
gdCache:add_root("C:/ckCache/googleDrive")

local fileId = gdCache:fetch_text("testFolder/abc/123/penguins.jpg")
if not gdCache.last_method_success then
    print("Filepath not found in cache.")
    return
end

-- We need to send a GET request like this:
-- GET https://www.googleapis.com/drive/v3/files/fileId?alt=media
-- The fileId is part of the path.
local sbPath = chilkat.StringBuilder.new()
sbPath:append("/drive/v3/files/")
sbPath:append(fileId)
rest:add_query_param("alt", "media")

-- To download to memory, we'll send the request in one call, then receive
-- the response header, and then the response body.
-- If the response header indicates failure or an unexpected response, then the
-- body is not the data we desire.

-- First send the HTTP request.
success = rest:send_req_no_body("GET", sbPath:get_as_string())
if not success then
    print(rest.last_error_text)
    return
end

-- Get the response header.
local statusCode = rest:read_response_header()
if statusCode ~= 200 then
    print("response status code = " .. rest.response_status_code)
    print("response status text = " .. rest.response_status_text)
    print("response header: " .. rest.response_header)

    -- Read the response body (which should be error text or HTML)
    local errResponseBody = rest:read_resp_body_string()
    if rest.last_method_success then
        print("response body: " .. errResponseBody)
    end

    return
end

-- Read the response body, which should contain the file data.

jpgBytes = ERROR: Method not in Chilkat for Lua: Rest.ReadRespBodyBinary
rest:ERROR()
if not rest.last_method_success then
    print(rest.last_error_text)
    return
end

-- Save jpgBytes to a file so we can examine the file to verify that it worked.
local fac = chilkat.FileAccess.new()
ERROR: Method not in Chilkat for Lua: FileAccess.WriteEntireFile
fac:ERROR()

print("File downloaded.")