Skip to main content

Finish parts upload

Confirms the multipart uploading finish

Function FinishPartsUpload(Val Name, Val Bucket, Val BasicData, Val UploadID, Val TagsArray, Val Headers = Undefined, Val Directory = False) Export

ParameterCLI optionTypeRequiredDescription
Name--nameStringName of the object in the bucket
Bucket--bucketStringName of the bucket to put the object
BasicData--basicStructure Of KeyAndValueBasic request data. See GetBasicDataStructure
UploadID--uploadStringUpload ID. See InitPartsUpload
TagsArray--tagsArray Of StringAn array of tags (Etag) from the uploads responses of each part
Headers--headersMap Of KeyAndValueAdditional request headers, if necessary
Directory--dirBooleanTrue > Path style URL, False > Virtual hosted style URL
Returns

Structure Of KeyAndValue - serialized JSON response from storage

tip

Method at AWS documentation: CompleteMultipartUpload

This is a service method. A PutObject method is intended for the common scenario of files uploading


1C:Enterprise/OneScript code example
URL = "s3.openintegrations.dev";
AccessKey = "bayselo...";
SecretKey = "12we34...";
Region = "BTC";

BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);

Name = "fileChunked.mp3";

Directory = True; // Formation URL in path-style
Bucket = "w567hjy1";
Entity = "https://hut.openintegrations.dev/test_data/song.mp3"; // URL, Path or Binary data
Entity = OPI_HTTPRequests.Get(Entity);

Result = OPI_S3.InitPartsUpload(Name, Bucket, BasicData, , Directory);

UploadID = Result["response"]["InitiateMultipartUploadResult"]["UploadId"];
TotalSize = Entity.Size();
ChunkSize = 5242880;
BytesRead = 0;
PartNumber = 1;

DataReader = New DataReader(Entity);
SourceStream = DataReader.SourceStream();
TagsArray = New Array;

While BytesRead < TotalSize Do

CurrentReading = DataReader.Read(ChunkSize);
CurrentData = CurrentReading.GetBinaryData();

If CurrentData.Size() = 0 Then
Break;
EndIf;

Result = OPI_S3.UploadObjectPart(Name
, Bucket
, BasicData
, UploadID
, PartNumber
, CurrentData
, Directory);

BytesRead = SourceStream.CurrentPosition();

ETag = Result["headers"]["Etag"];
ETag = ?(ETag = Undefined, Result["headers"]["ETag"], ETag);

TagsArray.Add(ETag);

PartNumber = PartNumber + 1;

EndDo;

Result = OPI_S3.FinishPartsUpload(Name, Bucket, BasicData, UploadID, TagsArray, , Directory);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# JSON data can also be passed as a path to a .json file

oint s3 FinishPartsUpload \
--name "fileChunked.mp3" \
--bucket "5540d93d" \
--basic "{'URL':'s3.openintegrations.dev','AccessKey':'***','SecretKey':'***','Region':'BTC','Service':'s3'}" \
--upload "MGI2Y2U2YTAtMDYxZC00NzkwLTk3YmEtOTM0NDY2MWFjZGYwLjc5NTExNGJmLTBkMDMtNDkzMC04NjcwLWRhYTIyMDQzZGMxNXgxNzc5ODA1NjIyMjUzNTgwNDE0" \
--tags "['\"'"566e2d464b39b91eb8b5d89fb9f1a318\"'"','\"'"adb76a9a9ff8226ed08fb6f343102908\"'"']" \
--dir true
Result
{
"status": 200,
"response": {
"CompleteMultipartUploadResult": {
"Location": "http://s3.openintegrations.dev/5540d93d/fileChunked.mp3",
"Bucket": "5540d93d",
"Key": "***",
"ETag": "\"22c09aeeb42144b375de8a4c1a1bb573-2\""
}
},
"headers": {
"Accept-Ranges": "bytes",
"ETag": "\"22c09aeeb42144b375de8a4c1a1bb573-2\"",
"Vary": "Accept-Encoding",
"Server": "Microsoft-IIS/10.0",
"Strict-Transport-Security": "max-age=31536000; includeSubDomains",
"X-Amz-Id-2": "dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8",
"X-Amz-Request-Id": "18B323C9343E511A",
"X-Content-Type-Options": "nosniff",
"X-Ratelimit-Limit": "6518",
"X-Ratelimit-Remaining": "6518",
"X-XSS-Protection": "1; mode=block",
"X-Powered-By": "ARR/3.0",
"Date": "Tue, 26 May 2026 14:27:04 GMT",
"Content-Type": "application/xml",
"Content-Length": "334"
}
}