private PutObjectResult putObjectUsingMetadata(PutObjectRequest req) { ContentCryptoMaterial cekMaterial = createContentCryptoMaterial(req); // Wraps the object data with a cipher input stream final File fileOrig = req.getFile(); final InputStream isOrig = req.getInputStream(); PutObjectRequest wrappedReq = wrapWithCipher(req, cekMaterial); // Update the metadata req.setMetadata(updateMetadataWithContentCryptoMaterial( req.getMetadata(), req.getFile(), cekMaterial)); // Put the encrypted object into S3 try { return s3.putObject(wrappedReq); } finally { cleanupDataSource(req, fileOrig, isOrig, wrappedReq.getInputStream(), log); } }
/** * Captures the state of the upload. */ private void captureUploadStateIfPossible() { if (origReq.getSSECustomerKey() == null) { persistableUpload = new PersistableUpload(origReq.getBucketName(), origReq.getKey(), origReq.getFile() .getAbsolutePath(), multipartUploadId, configuration.getMinimumUploadPartSize(), configuration.getMultipartUploadThreshold()); notifyPersistableTransferAvailability(); } }
final File fileOrig = putObjectRequest.getFile(); final InputStream isOrig = putObjectRequest.getInputStream(); final PutObjectRequest putInstFileRequest = putObjectRequest.clone()
putObjectRequest = beforeClientExecution(putObjectRequest); rejectNull(putObjectRequest, "The PutObjectRequest parameter must be specified when uploading an object"); final File file = putObjectRequest.getFile(); final InputStream isOrig = putObjectRequest.getInputStream(); final String bucketName = putObjectRequest.getBucketName();
/** * Returns the content length of the unencrypted data in a PutObjectRequest, * or -1 if the original content-length isn't known. * * @param request The request to examine. * @param metadata The metadata for the request. * @return The content length of the unencrypted data in the request, or -1 * if it isn't known. */ private static long getUnencryptedContentLength(PutObjectRequest request, ObjectMetadata metadata) { if (request.getFile() != null) { return request.getFile().length(); } else if (request.getInputStream() != null && metadata.getRawMetadataValue(Headers.CONTENT_LENGTH) != null) { return metadata.getContentLength(); } return -1; }
/** * @param plaintextLength the expected total number of bytes of the * plaintext; or -1 if not available. */ private static InputStream getEncryptedInputStream( PutObjectRequest request, CipherFactory cipherFactory, long plaintextLength) { try { InputStream is = request.getInputStream(); if (request.getFile() != null) { // Historically file takes precedence over the original input // stream is = new RepeatableFileInputStream(request.getFile()); } if (plaintextLength > -1) { // This ensures the plain-text read from the underlying data // stream has the same length as the expected total is = new LengthCheckInputStream(is, plaintextLength, EXCLUDE_SKIPPED_BYTES); } return new RepeatableCipherInputStream(is, cipherFactory); } catch (Exception e) { throw new AmazonClientException("Unable to create cipher input stream: " + e.getMessage(), e); } }
/** * Captures the state of the upload. */ private void captureUploadStateIfPossible() { if (putObjectRequest.getSSECustomerKey() == null) { persistableUpload = new PersistableUpload(putObjectRequest.getBucketName(), putObjectRequest.getKey(), putObjectRequest.getFile() .getAbsolutePath(), multipartUploadId, configuration.getMinimumUploadPartSize(), configuration.getMultipartUploadThreshold()); notifyPersistableTransferAvailability(); } }
private PutObjectResult putObjectUsingMetadata(PutObjectRequest req) { final ContentCryptoMaterial cekMaterial = createContentCryptoMaterial(req); // Wraps the object data with a cipher input stream final File fileOrig = req.getFile(); final InputStream isOrig = req.getInputStream(); final PutObjectRequest wrappedReq = wrapWithCipher(req, cekMaterial); // Update the metadata req.setMetadata(updateMetadataWithContentCryptoMaterial( req.getMetadata(), req.getFile(), cekMaterial)); // Put the encrypted object into S3 try { return s3.putObject(wrappedReq); } finally { cleanupDataSource(req, fileOrig, isOrig, wrappedReq.getInputStream(), log); } }
/** * Update the request's ObjectMetadata with the necessary information for * decrypting the object * * @param request Non-null PUT request encrypted using the given instruction * @param instruction Non-null instruction used to encrypt the data in this * PUT request. */ public static void updateMetadataWithEncryptionInstruction(PutObjectRequest request, EncryptionInstruction instruction) { byte[] keyBytesToStoreInMetadata = instruction.getEncryptedSymmetricKey(); Cipher symmetricCipher = instruction.getSymmetricCipher(); Map<String, String> materialsDescription = instruction.getMaterialsDescription(); ObjectMetadata metadata = request.getMetadata(); if (metadata == null) metadata = new ObjectMetadata(); if (request.getFile() != null) { Mimetypes mimetypes = Mimetypes.getInstance(); metadata.setContentType(mimetypes.getMimetype(request.getFile())); } updateMetadata(metadata, keyBytesToStoreInMetadata, symmetricCipher, materialsDescription); request.setMetadata(metadata); }
@Test public void testUploadFromFile() throws IOException { EasyMock.reset(mockS3); EasyMock.expect(mockS3.getRegion()).andReturn(Region.US_Standard); Capture<PutObjectRequest> por = new Capture<PutObjectRequest>(); EasyMock.expect(mockS3.putObject(EasyMock.capture(por))).andReturn(null); EasyMock.replay(mockS3); mapper.getS3ClientCache().useClient(mockS3); S3Link link = mapper.createS3Link(bucket, key); File temp = new File("testUpload"); if (temp.exists()) { assertTrue(temp.delete()); } temp.createNewFile(); FileOutputStream fos = new FileOutputStream(temp); fos.write("Test".getBytes(StringUtils.UTF8)); fos.close(); link.uploadFrom(temp); File sent = por.getValue().getFile(); assertEquals(temp, sent); assertTrue(temp.delete()); EasyMock.verify(); }
private Boolean uploadSinglePartAndWaitForCompletion() { final PutObjectRequest putObjectRequest = createPutObjectRequest(upload); final long length = putObjectRequest.getFile().length(); TransferUtility.appendTransferServiceUserAgentString(putObjectRequest); updater.updateProgress(upload.id, 0, length);
final File fileOrig = putObjectRequest.getFile(); final InputStream isOrig = putObjectRequest.getInputStream(); final PutObjectRequest putInstFileRequest = putObjectRequest.clone()
public PutObjectResult putObject(PutObjectRequest putRequest) throws AmazonClientException { // If we have an inputstream, modify the putRequest with a file of known size instead if (putRequest.getFile() == null && putRequest.getInputStream() != null) { File cachedFile = cacheLocally(putRequest.getInputStream(), putRequest.getKey()); putRequest.setInputStream(null); putRequest.setFile(cachedFile); PutObjectResult result = super.putObject(putRequest); cachedFile.delete(); return result; } return super.putObject(putRequest); }
@Override public PutObjectResult putObject(PutObjectRequest putRequest) throws AmazonClientException { String bucketName = putRequest.getBucketName(); String key = putRequest.getKey(); InputStream inputStream = putRequest.getInputStream(); if (inputStream == null) { File inFile = putRequest.getFile(); inputStream = getInputStream(inFile); } return putObject(bucketName, key, inputStream, putRequest.getMetadata()); }
assertEquals("bucket", from.getBucketName()); assertNull(from.getCannedAcl()); assertEquals(file, from.getFile()); assertNull(from.getInputStream()); assertNull(from.getRedirectLocation());