import com.volcengine.tos.TOSV2;
import com.volcengine.tos.TOSV2ClientBuilder;
import com.volcengine.tos.TosClientException;
import com.volcengine.tos.TosServerException;
import com.volcengine.tos.comm.io.TosRepeatableBoundedFileInputStream;
import com.volcengine.tos.model.object.*;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class MultipartUploadWithFileInputStreamFullExample {
public static void main(String[] args) {
String endpoint = "your endpoint";
String region = "your region";
String accessKey = System.getenv("TOS_ACCESS_KEY");
String secretKey = System.getenv("TOS_SECRET_KEY");
String bucketName = "bucket-example";
String objectKey = "example_dir/example_object.txt";
String filePath = "example_dir/example_file.txt";
TOSV2 tos = new TOSV2ClientBuilder().build(region, endpoint, accessKey, secretKey);
CreateMultipartUploadInput create = new CreateMultipartUploadInput().setBucket(bucketName).setKey(objectKey);
CreateMultipartUploadOutput createOutput = tos.createMultipartUpload(create);
System.out.println("createMultipartUpload succeed, uploadId is " + createOutput.getUploadID());
uploadId = createOutput.getUploadID();
long partSize = 5 * 1024 * 1024;
List<UploadedPartV2> uploadedParts = new ArrayList<>();
long fileSize = new File(filePath).length();
for (int i = 1; offset < fileSize; ++i) {
try(FileInputStream content = new FileInputStream(filePath);){
InputStream wrappedContent = new TosRepeatableBoundedFileInputStream(content, partSize);
if (fileSize-offset < partSize) {
partSize = fileSize-offset;
UploadPartV2Input input = new UploadPartV2Input().setBucket(bucketName)
.setKey(objectKey).setUploadID(uploadId).setPartNumber(partNumber)
.setContentLength(partSize).setContent(wrappedContent);
UploadPartV2Output output = tos.uploadPart(input);
uploadedParts.add(new UploadedPartV2().setPartNumber(i).setEtag(output.getEtag()));
System.out.printf("uploadPart succeed, partNumber is %d, etag is %s, crc64 value is %s\n",
output.getPartNumber(), output.getEtag(), output.getHashCrc64ecma());
} catch (IOException e) {
System.out.println("uploadPart read file failed");
CompleteMultipartUploadV2Input complete = new CompleteMultipartUploadV2Input().setBucket(bucketName)
.setKey(objectKey).setUploadID(uploadId);
complete.setUploadedParts(uploadedParts);
CompleteMultipartUploadV2Output completedOutput = tos.completeMultipartUpload(complete);
System.out.printf("completeMultipartUpload succeed, etag is %s, crc64 value is %s, location is %s.\n",
completedOutput.getEtag(), completedOutput.getHashCrc64ecma(), completedOutput.getLocation());
} catch (TosClientException e) {
System.out.println("uploadPart failed");
System.out.println("Message: " + e.getMessage());
if (e.getCause() != null) {
e.getCause().printStackTrace();
} catch (TosServerException e) {
System.out.println("uploadPart failed");
System.out.println("StatusCode: " + e.getStatusCode());
System.out.println("Code: " + e.getCode());
System.out.println("Message: " + e.getMessage());
System.out.println("RequestID: " + e.getRequestID());
System.out.println("uploadPart failed");
System.out.println("unexpected exception, message: " + t.getMessage());