SQL Server
SQL Server
Upload Media for Google Photos
See more Google Photos Examples
Demonstrates how to upload a media file (such as a JPG image) that will be placed in a Google Photos album. Uploading is a two-step process:
- Upload the raw bytes to a Google Server. This doesn't result in any media items being created in the user’s Google Photos account. Instead, it returns an upload token which identifies the uploaded bytes.
- Use the upload token to create the media item in the user’s Google Photos account. You can choose whether the media should be also added to a specific album.
This example shows step 1.
Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
DECLARE @iTmp0 int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
-- Get the previously obtained access token.
-- See Get Google Photos Access Token.
DECLARE @jsonToken int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @jsonToken OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OAMethod @jsonToken, 'LoadFile', @success OUT, 'qa_data/tokens/googlePhotos.json'
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @jsonToken, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @jsonToken
RETURN
END
DECLARE @http int
EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT
EXEC sp_OAMethod @jsonToken, 'StringOf', @sTmp0 OUT, 'access_token'
EXEC sp_OASetProperty @http, 'AuthToken', @sTmp0
-- This is the HTTPS POST we'll be sending:
-- POST https://photoslibrary.googleapis.com/v1/uploads
-- Authorization: Bearer OAUTH2_TOKEN
-- Content-type: application/octet-stream
-- X-Goog-Upload-File-Name: FILENAME
-- X-Goog-Upload-Protocol: raw
EXEC sp_OAMethod @http, 'SetRequestHeader', NULL, 'X-Goog-Upload-File-Name', 'penguins.jpg'
EXEC sp_OAMethod @http, 'SetRequestHeader', NULL, 'X-Goog-Upload-Protocol', 'raw'
-- Assuming the media isn't super large, we'll just read it into memory and send.
-- (Another example exists for streaming a large media file directly from the filesystem.)
-- Load the media file into memory.
DECLARE @bdMedia int
EXEC @hr = sp_OACreate 'Chilkat.BinData', @bdMedia OUT
EXEC sp_OAMethod @bdMedia, 'LoadFile', @success OUT, 'qa_data/jpg/penguins.jpg'
DECLARE @url nvarchar(4000)
SELECT @url = 'https://photoslibrary.googleapis.com/v1/uploads'
DECLARE @resp int
EXEC @hr = sp_OACreate 'Chilkat.HttpResponse', @resp OUT
EXEC sp_OAMethod @http, 'HttpBd', @success OUT, 'POST', @url, @bdMedia, 'application/octet-stream', @resp
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @jsonToken
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @bdMedia
EXEC @hr = sp_OADestroy @resp
RETURN
END
-- Examine the response status code. Success is indicated by a status code of 200.
EXEC sp_OAGetProperty @resp, 'StatusCode', @iTmp0 OUT
PRINT 'response status code: ' + @iTmp0
-- Show the response body.
EXEC sp_OAGetProperty @resp, 'StatusCode', @iTmp0 OUT
IF @iTmp0 = 200
BEGIN
-- Success.
EXEC sp_OAGetProperty @resp, 'BodyStr', @sTmp0 OUT
PRINT 'Upload token: ' + @sTmp0
END
ELSE
BEGIN
PRINT 'Error:'
EXEC sp_OAGetProperty @resp, 'BodyStr', @sTmp0 OUT
PRINT @sTmp0
END
-- Clear headers such as X-Goog-Upload-File-Name for subsequent HTTP requests sent on this object..
EXEC sp_OAMethod @http, 'ClearHeaders', NULL
EXEC @hr = sp_OADestroy @jsonToken
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @bdMedia
EXEC @hr = sp_OADestroy @resp
END
GO