Lua
Lua
Download File (Stream to Local Filesystem)
See more Google Drive Examples
This example demonstrates how to download the content of a file from Google Drive. The file is streamed to the local filesystem.Chilkat Lua Downloads
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")
-- Create a stream object with a SinkFile set to the path where the downloaded file will go.
local fileStream = chilkat.Stream.new()
fileStream.sink_file = "qa_output/penguins.jpg"
-- Indicate that the response body should stream directly to fileStream,
-- but only if the response status is 200.
rest:set_response_body_stream(200, true, fileStream)
-- Download the file, streaming the content to the SinkFile.
local jsonResponse = rest:full_request_no_body("GET", sbPath:get_as_string())
if not rest.last_method_success then
print(rest.last_error_text)
return
end
-- A successful response will have a status code equal to 200.
if rest.response_status_code ~= 200 then
print("response status code = " .. rest.response_status_code)
print("response status text = " .. rest.response_status_text)
print("response header: " .. rest.response_header)
return
end
print("File downloaded.")