Giter Club home page Giter Club logo

Comments (2)

kisscelia avatar kisscelia commented on July 19, 2024

same logic,
multipart upload is OK, can upload successfully.

	@Override
	public void createMultipartObject(String container, String object, InputStream data, long length, Config config) {
		super.createMultipartObject(container, object, data, length, config);

		CreateMultipartUploadRequest mRequest = CreateMultipartUploadRequest.builder()
				.storageClass(storageClass)
				.bucket(container)
				.key(object)
				.build();

		// Create a list of ETag objects. You retrieve ETags for each object part uploaded,
		// then, after each individual part has been uploaded, pass the list of ETags to
		// the request to complete the upload.
		List<CompletedPart> partETags = new ArrayList<CompletedPart>();

		try {
			CreateMultipartUploadResponse mResponse = client.createMultipartUpload(mRequest);
			String uploadId = mResponse.uploadId();

			long position = 0;
			long tempPartSize; // avoid to change the partSize, bug fix:#25

			for (int i = 1; position < length; i++) {
				// Because the last part could be less than 5 MiB, adjust the part size as
				// needed.
				tempPartSize = Math.min(partSize, (length - position));

				// Create the request to upload a part.
				UploadPartRequest uRequest = UploadPartRequest.builder()
						.bucket(container)
						.key(object)
						.uploadId(uploadId)
						.partNumber(i)
						.build();
				
				// 2024.6.25, sine.
//				RequestBody rBody = RequestBody.fromInputStream(data, tempPartSize); // not support resetting.
				
				// set read limit to 128KB, don't know whether useful or not.
				// warning: no QA!
				RequestBody rBody = RequestBody.fromContentProvider(
						ContentStreamProvider.fromInputStream(data), 
						tempPartSize, Mimetype.MIMETYPE_OCTET_STREAM);
				
				// Upload the part and add the response's ETag to our list.
				UploadPartResponse uResponse = client.uploadPart(uRequest, rBody);

				CompletedPart tempPart = CompletedPart.builder()
						.partNumber(i)
						.eTag(uResponse.eTag())
						.build();
				partETags.add(tempPart);

				position += tempPartSize;
			}

			// Complete the multipart upload.
			CompleteMultipartUploadRequest compRequest = CompleteMultipartUploadRequest.builder()
					.bucket(container)
					.key(object)
					.uploadId(uploadId)
					.multipartUpload(CompletedMultipartUpload.builder().parts(partETags).build())
					.build();
			
			client.completeMultipartUpload(compRequest);

		} catch (S3Exception se) {
			logger.debug("Service exception thrown.");
			throw new StorageException(se);
		} catch (SdkClientException sce) {
			logger.debug("Client exception thrown.");
			throw new StorageTimeoutException(sce);
		}
	}

from aws-sdk-java-v2.

kisscelia avatar kisscelia commented on July 19, 2024

image
setReadLimit to 128KB

can we set it as we want?

e.g: use this method.
image

from aws-sdk-java-v2.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.