Chilkat HOME Android™ Classic ASP C C++ C# Mono C# .NET Core C# C# UWP/WinRT DataFlex Delphi ActiveX Delphi DLL Visual FoxPro Java Lianja MFC Objective-C Perl PHP ActiveX PHP Extension PowerBuilder PowerShell PureBasic CkPython Chilkat2-Python Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ Visual Basic 6.0 VB.NET VB.NET UWP/WinRT VBScript Xojo Plugin Node.js Excel Go
(Visual FoxPro) S3 Complete a Multipart Upload
This operation completes a multipart upload by assembling previously uploaded parts.
Processing of a Complete Multipart Upload request could take several minutes to complete. After Amazon S3 begins processing the request, it sends an HTTP response header that specifies a 200 OK response. While processing is in progress, Amazon S3 periodically sends whitespace characters to keep the connection from timing out. Because a request could fail after the initial 200 OK response has been sent, it is important that you check the response body to determine whether the request succeeded.
This example sends a POST request to complete a multipart upload, which looks like this:
POST /ObjectName?uploadId=UploadId HTTP/1.1 Host: BucketName.s3.amazonaws.com Date: Date Content-Length: Size Authorization: authorization string <CompleteMultipartUpload> <Part> <PartNumber>PartNumber</PartNumber> <ETag>ETag</ETag> </Part> ... </CompleteMultipartUpload>
LOCAL loXmlInit LOCAL lnSuccess LOCAL lcUploadId LOCAL loXmlPartsList LOCAL loRest LOCAL lnBTls LOCAL lnPort LOCAL lnBAutoReconnect LOCAL loAuthAws LOCAL lcResponseXml LOCAL loXml * This example requires the Chilkat API to have been previously unlocked. * See Global Unlock Sample for sample code. * The 1st step in an S3 multipart upload is to initiate it, * as shown here: Initiate S3 Multipart Upload * The 2nd step is to upload the parts * as shown here: S3 Upload Parts * The 3rd and final step (this example) is to complete the multipart upload. * Other S3 Multipart Upload Examples: * Abort Multipart Upload * List Parts * When the multipart upload was initiated, an UploadId was provided in the XML response, and it * was saved to a file. Steps 2 and 3 begin by loading the XML and getting * the Upload ID. loXmlInit = CreateObject('Chilkat_9_5_0.Xml') lnSuccess = loXmlInit.LoadXmlFile("s3_multipart_uploads/initiate.xml") IF (lnSuccess <> 1) THEN ? "Did not find the initiate.xml XML file." RELEASE loXmlInit CANCEL ENDIF lcUploadId = loXmlInit.GetChildContent("UploadId") ? "UploadId = " + lcUploadId * We'll also need the XML file that contains a record of the parts * with part numbers and ETags. (This file was produced when parts were being uploaded.) loXmlPartsList = CreateObject('Chilkat_9_5_0.Xml') lnSuccess = loXmlPartsList.LoadXmlFile("s3_multipart_uploads/partsList.xml") IF (lnSuccess <> 1) THEN ? "Did not find the partsList.xml XML file." RELEASE loXmlInit RELEASE loXmlPartsList CANCEL ENDIF loRest = CreateObject('Chilkat_9_5_0.Rest') * Connect to the Amazon AWS REST server. lnBTls = 1 lnPort = 443 lnBAutoReconnect = 1 lnSuccess = loRest.Connect("s3.amazonaws.com",lnPort,lnBTls,lnBAutoReconnect) * ---------------------------------------------------------------------------- * Important: For buckets created in regions outside us-east-1, * there are three important changes that need to be made. * See Working with S3 Buckets in Non-us-east-1 Regions for the details. * ---------------------------------------------------------------------------- * Provide AWS credentials for the REST call. loAuthAws = CreateObject('Chilkat_9_5_0.AuthAws') loAuthAws.AccessKey = "AWS_ACCESS_KEY" loAuthAws.SecretKey = "AWS_SECRET_KEY" loAuthAws.ServiceName = "s3" lnSuccess = loRest.SetAuthAws(loAuthAws) * Set the bucket name via the HOST header. * In this case, the bucket name is "chilkat100". loRest.Host = "chilkat100.s3.amazonaws.com" * The "uploadId=UploadId" must be added as a query parameter. This allows it to be * incorporated into the AWS signature calculation, which is a requirement. * Therefore, we use AddQueryParam: loRest.AddQueryParam("uploadId",lcUploadId) * Our ObjectName in this case is "somethingBig.zip". lcResponseXml = loRest.FullRequestString("POST","/somethingBig.zip",loXmlPartsList.GetXml()) IF (loRest.LastMethodSuccess <> 1) THEN ? loRest.LastErrorText RELEASE loXmlInit RELEASE loXmlPartsList RELEASE loRest RELEASE loAuthAws CANCEL ENDIF * When successful, the S3 Storage service will respond with a 200 response code, * with an XML body. IF (loRest.ResponseStatusCode <> 200) THEN * Examine the request/response to see what happened. ? "response status code = " + STR(loRest.ResponseStatusCode) ? "response status text = " + loRest.ResponseStatusText ? "response header: " + loRest.ResponseHeader ? "response body: " + lcResponseXml ? "---" ? "LastRequestStartLine: " + loRest.LastRequestStartLine ? "LastRequestHeader: " + loRest.LastRequestHeader ENDIF * Load the XML response into Chilkat XMl and emit via GetXml to see the XML in a pretty-printed (indented) readable format. loXml = CreateObject('Chilkat_9_5_0.Xml') loXml.LoadXml(lcResponseXml) ? loXml.GetXml() ? "----" ? "Multipart upload completed." RELEASE loXmlInit RELEASE loXmlPartsList RELEASE loRest RELEASE loAuthAws RELEASE loXml
© 2000-2020 Chilkat Software, Inc. All Rights Reserved.