SQL Server
SQL Server
Bunny Sign URL and then Download using Signed URL
See more Bunny CDN Examples
Shows how to sign a URL for BunnyCDN Token Authentication and then use it to download.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 assumes the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
DECLARE @mySecurityKey nvarchar(4000)
SELECT @mySecurityKey = 'e7ea8d73-8fa0-44ef-a2cc-91526f7df5ed'
DECLARE @url nvarchar(4000)
SELECT @url = 'https://test.b-cdn.net/sample-pdf-with-images.pdf'
-- Extract the URL components.
DECLARE @urlObj int
EXEC @hr = sp_OACreate 'Chilkat.Url', @urlObj OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OAMethod @urlObj, 'ParseUrl', @success OUT, @url
DECLARE @url_scheme nvarchar(4000)
SELECT @url_scheme = 'https'
EXEC sp_OAGetProperty @urlObj, 'Ssl', @iTmp0 OUT
IF @iTmp0 = 0
BEGIN
SELECT @url_scheme = 'http'
END
DECLARE @url_host nvarchar(4000)
EXEC sp_OAGetProperty @urlObj, 'Host', @url_host OUT
DECLARE @url_path nvarchar(4000)
EXEC sp_OAGetProperty @urlObj, 'Path', @url_path OUT
-- Calculate an expiration time 1 hour from the current date/time.
DECLARE @expTime int
EXEC @hr = sp_OACreate 'Chilkat.CkDateTime', @expTime OUT
EXEC sp_OAMethod @expTime, 'SetFromCurrentSystemTime', @success OUT
EXEC sp_OAMethod @expTime, 'AddSeconds', @success OUT, 3600
DECLARE @expires nvarchar(4000)
EXEC sp_OAMethod @expTime, 'GetAsUnixTimeStr', @expires OUT, 0
PRINT 'Expires = ' + @expires
-- Create the string to hash
DECLARE @sbToHash int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbToHash OUT
EXEC sp_OAMethod @sbToHash, 'Append', @success OUT, @mySecurityKey
EXEC sp_OAMethod @sbToHash, 'Append', @success OUT, @url_path
EXEC sp_OAMethod @sbToHash, 'Append', @success OUT, @expires
-- Base64Url encoding is the same as base64, except "-" is used instead of "+",
-- "_" is used instead of "/", and no "=" padding is added.
DECLARE @token nvarchar(4000)
EXEC sp_OAMethod @sbToHash, 'GetHash', @token OUT, 'sha256', 'base64Url', 'utf-8'
DECLARE @sbSignedUrl int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbSignedUrl OUT
EXEC sp_OAMethod @sbSignedUrl, 'Append', @success OUT, @url_scheme
EXEC sp_OAMethod @sbSignedUrl, 'Append', @success OUT, '://'
EXEC sp_OAMethod @sbSignedUrl, 'Append', @success OUT, @url_host
EXEC sp_OAMethod @sbSignedUrl, 'Append', @success OUT, @url_path
EXEC sp_OAMethod @sbSignedUrl, 'Append', @success OUT, '?token='
EXEC sp_OAMethod @sbSignedUrl, 'Append', @success OUT, @token
EXEC sp_OAMethod @sbSignedUrl, 'Append', @success OUT, '&expires='
EXEC sp_OAMethod @sbSignedUrl, 'Append', @success OUT, @expires
DECLARE @signedUrl nvarchar(4000)
EXEC sp_OAMethod @sbSignedUrl, 'GetAsString', @signedUrl OUT
PRINT 'Signed URL: ' + @signedUrl
-- Use the signed URL to download the file.
DECLARE @http int
EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT
EXEC sp_OAMethod @http, 'Download', @success OUT, @signedUrl, 'c:/aaworkarea/sample.pdf'
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
END
ELSE
BEGIN
PRINT 'Success.'
END
EXEC @hr = sp_OADestroy @urlObj
EXEC @hr = sp_OADestroy @expTime
EXEC @hr = sp_OADestroy @sbToHash
EXEC @hr = sp_OADestroy @sbSignedUrl
EXEC @hr = sp_OADestroy @http
END
GO