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
(PowerBuilder) Upload File in Blocks (with Content-MD5 header) and Commit the Block ListDemonstrates how to upload a file in blocks and then commit the block list. This example includes a Content-MD5 header for each block.
integer li_rc oleobject loo_Rest integer li_BTls integer li_Port integer li_BAutoReconnect integer li_Success oleobject loo_AzAuth oleobject loo_Xml oleobject loo_Fac integer li_BlockSize integer li_NumBlocks oleobject loo_Crypt oleobject loo_SbResponseBody oleobject loo_UriPath string ls_BlockId oleobject loo_DataBlock string ls_ContentMd5 integer i string ls_XmlStr string ls_ResponseStr // Azure Blob Service Example: Upload a file in blocks, and then commit the block list. // See also: https://msdn.microsoft.com/en-us/library/azure/dd135726.aspx // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. loo_Rest = create oleobject // Use "Chilkat_9_5_0.Rest" for versions of Chilkat < 10.0.0 li_rc = loo_Rest.ConnectToNewObject("Chilkat.Rest") if li_rc < 0 then destroy loo_Rest MessageBox("Error","Connecting to COM object failed") return end if // Connect to the Azure Storage Blob Service li_BTls = 1 li_Port = 443 li_BAutoReconnect = 1 // In this example, the storage account name is "chilkat". li_Success = loo_Rest.Connect("chilkat.blob.core.windows.net",li_Port,li_BTls,li_BAutoReconnect) if li_Success <> 1 then Write-Debug loo_Rest.LastErrorText destroy loo_Rest return end if // Provide Azure Cloud credentials for the REST call. loo_AzAuth = create oleobject // Use "Chilkat_9_5_0.AuthAzureStorage" for versions of Chilkat < 10.0.0 li_rc = loo_AzAuth.ConnectToNewObject("Chilkat.AuthAzureStorage") loo_AzAuth.AccessKey = "AZURE_ACCESS_KEY" // The account name used here should match the 1st part of the domain passed in the call to Connect (above). loo_AzAuth.Account = "chilkat" loo_AzAuth.Scheme = "SharedKey" loo_AzAuth.Service = "Blob" // This causes the "x-ms-version: 2021-08-06" header to be automatically added. loo_AzAuth.XMsVersion = "2021-08-06" li_Success = loo_Rest.SetAuthAzureStorage(loo_AzAuth) // Note: The application does not need to explicitly set the following // headers: Content-Length, x-ms-date, Authorization. These headers // are automatically set by Chilkat. // As the blocks are uploaded, we'll keep an XML block list for the subsequent commit.. loo_Xml = create oleobject // Use "Chilkat_9_5_0.Xml" for versions of Chilkat < 10.0.0 li_rc = loo_Xml.ConnectToNewObject("Chilkat.Xml") loo_Xml.Tag = "BlockList" // Any type of file can be uploaded in this way. It can a text file, binary file, anything... // This example will upload an XML file that is approximately 275K in size. It can be downloaded // at http://www.chilkatsoft.com/hamlet.xml loo_Fac = create oleobject // Use "Chilkat_9_5_0.FileAccess" for versions of Chilkat < 10.0.0 li_rc = loo_Fac.ConnectToNewObject("Chilkat.FileAccess") li_Success = loo_Fac.OpenForRead("qa_data/xml/hamlet.xml") // Assuming success for the example.. // We'll upload in 16K blocks (normally a program would upload in larger block sizes than this, // but this is just an example...) li_BlockSize = 16384 // How many 16K blocks? (Including 1 for the last partial block) li_NumBlocks = loo_Fac.GetNumBlocks(li_BlockSize) loo_Crypt = create oleobject // Use "Chilkat_9_5_0.Crypt2" for versions of Chilkat < 10.0.0 li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2") loo_Crypt.HashAlgorithm = "md5" loo_SbResponseBody = create oleobject // Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 li_rc = loo_SbResponseBody.ConnectToNewObject("Chilkat.StringBuilder") loo_UriPath = create oleobject // Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 li_rc = loo_UriPath.ConnectToNewObject("Chilkat.StringBuilder") loo_DataBlock = create oleobject // Use "Chilkat_9_5_0.BinData" for versions of Chilkat < 10.0.0 li_rc = loo_DataBlock.ConnectToNewObject("Chilkat.BinData") i = 0 do while i < li_NumBlocks loo_DataBlock.Clear() li_Success = loo_Fac.ReadBlockBd(i,li_BlockSize,loo_DataBlock) if li_Success = 0 then Write-Debug loo_Fac.LastErrorText destroy loo_Rest destroy loo_AzAuth destroy loo_Xml destroy loo_Fac destroy loo_Crypt destroy loo_SbResponseBody destroy loo_UriPath destroy loo_DataBlock return end if // Generate a base64 block ID. // (Chilkat provides a helper method named GenBlockId to make this easy) // A pre-base64 encoded block ID length of 4 is sufficient in this case because // this file certainly won't have more than 99,999 blocks.. ls_BlockId = loo_Fac.GenBlockId(i,4,"base64") // Add this blockId to the list of blocks to be committed. loo_Xml.NewChild2("Latest",ls_BlockId) // Build the URI path loo_UriPath.Clear() li_Success = loo_UriPath.Append("/mycontainer/hamlet.xml?comp=block&blockId=") li_Success = loo_UriPath.Append(ls_BlockId) ls_ContentMd5 = loo_Crypt.HashBdENC(loo_DataBlock) loo_Rest.AddHeader("Content-MD5",ls_ContentMd5) // Upload this block.. loo_SbResponseBody.Clear() li_Success = loo_Rest.FullRequestBd("PUT",loo_UriPath.GetAsString(),loo_DataBlock,loo_SbResponseBody) if li_Success = 0 then Write-Debug loo_Rest.LastErrorText destroy loo_Rest destroy loo_AzAuth destroy loo_Xml destroy loo_Fac destroy loo_Crypt destroy loo_SbResponseBody destroy loo_UriPath destroy loo_DataBlock return end if // Verify that we received a 201 status code. if loo_Rest.ResponseStatusCode <> 201 then // Examine the request/response to see what happened. Write-Debug "response status code = " + string(loo_Rest.ResponseStatusCode) Write-Debug "response status text = " + loo_Rest.ResponseStatusText Write-Debug "response header: " + loo_Rest.ResponseHeader Write-Debug "response body (if any): " + loo_SbResponseBody.GetAsString() Write-Debug "---" Write-Debug "LastRequestStartLine: " + loo_Rest.LastRequestStartLine Write-Debug "LastRequestHeader: " + loo_Rest.LastRequestHeader destroy loo_Rest destroy loo_AzAuth destroy loo_Xml destroy loo_Fac destroy loo_Crypt destroy loo_SbResponseBody destroy loo_UriPath destroy loo_DataBlock return end if i = i + 1 loop loo_Fac.FileClose() // Now commit the blocks. // Let's have a look at the XML that will commit the blocks: ls_XmlStr = loo_Xml.GetXml() Write-Debug ls_XmlStr // The XML will look like this: // <?xml version="1.0" encoding="utf-8" ?> // <BlockList> // <Latest>MDAwMA==</Latest> // <Latest>MDAwMQ==</Latest> // <Latest>MDAwMg==</Latest> // <Latest>MDAwMw==</Latest> // <Latest>MDAwNA==</Latest> // <Latest>MDAwNQ==</Latest> // <Latest>MDAwNg==</Latest> // <Latest>MDAwNw==</Latest> // <Latest>MDAwOA==</Latest> // <Latest>MDAwOQ==</Latest> // <Latest>MDAxMA==</Latest> // <Latest>MDAxMQ==</Latest> // <Latest>MDAxMg==</Latest> // <Latest>MDAxMw==</Latest> // <Latest>MDAxNA==</Latest> // <Latest>MDAxNQ==</Latest> // <Latest>MDAxNg==</Latest> // <Latest>MDAxNw==</Latest> // </BlockList> // -------------------------------------------------------------------------- // IMPORTANT: Remove the Content-MD5 header previously set in the loop above. // -------------------------------------------------------------------------- loo_Rest.RemoveHeader("Content-MD5") // Send the PUT Block List... ls_ResponseStr = loo_Rest.FullRequestString("PUT","/mycontainer/hamlet.xml?comp=blocklist",ls_XmlStr) if loo_Rest.LastMethodSuccess <> 1 then Write-Debug loo_Rest.LastErrorText destroy loo_Rest destroy loo_AzAuth destroy loo_Xml destroy loo_Fac destroy loo_Crypt destroy loo_SbResponseBody destroy loo_UriPath destroy loo_DataBlock return end if // When successful, the Azure Storage service will respond with a 201 response status code, // with no response body. if loo_Rest.ResponseStatusCode <> 201 then // Examine the request/response to see what happened. Write-Debug "response status code = " + string(loo_Rest.ResponseStatusCode) Write-Debug "response status text = " + loo_Rest.ResponseStatusText Write-Debug "response header: " + loo_Rest.ResponseHeader Write-Debug "response body (if any): " + ls_ResponseStr Write-Debug "---" Write-Debug "LastRequestStartLine: " + loo_Rest.LastRequestStartLine Write-Debug "LastRequestHeader: " + loo_Rest.LastRequestHeader destroy loo_Rest destroy loo_AzAuth destroy loo_Xml destroy loo_Fac destroy loo_Crypt destroy loo_SbResponseBody destroy loo_UriPath destroy loo_DataBlock return end if Write-Debug "Success." destroy loo_Rest destroy loo_AzAuth destroy loo_Xml destroy loo_Fac destroy loo_Crypt destroy loo_SbResponseBody destroy loo_UriPath destroy loo_DataBlock |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.