Example usage for com.amazonaws.services.s3 Headers S3_CANNED_ACL

List of usage examples for com.amazonaws.services.s3 Headers S3_CANNED_ACL

Introduction

In this page you can find the example usage for com.amazonaws.services.s3 Headers S3_CANNED_ACL.

Prototype

String S3_CANNED_ACL

To view the source code for com.amazonaws.services.s3 Headers S3_CANNED_ACL.

Click Source Link

Document

S3's canned ACL header: x-amz-acl

Usage

From source file:com.emc.vipr.services.s3.ViPRS3Client.java

License:Open Source License

/**
 * Executes a (Subclass of) PutObjectRequest.  In particular, we check for subclasses
 * of the UpdateObjectRequest and inject the value of the Range header.  This version
 * also returns the raw ObjectMetadata for the response so callers can construct
 * their own result objects./*from   w  w w  .j av  a2 s  .c o m*/
 * @param putObjectRequest the request to execute
 * @return an ObjectMetadata containing the response headers.
 */
protected ObjectMetadata doPut(PutObjectRequest putObjectRequest) {
    assertParameterNotNull(putObjectRequest,
            "The PutObjectRequest parameter must be specified when uploading an object");

    String bucketName = putObjectRequest.getBucketName();
    String key = putObjectRequest.getKey();
    ObjectMetadata metadata = putObjectRequest.getMetadata();
    InputStream input = putObjectRequest.getInputStream();
    if (metadata == null)
        metadata = new ObjectMetadata();

    assertParameterNotNull(bucketName, "The bucket name parameter must be specified when uploading an object");
    assertParameterNotNull(key, "The key parameter must be specified when uploading an object");

    /*
     * This is compatible with progress listener set by either the legacy
     * method GetObjectRequest#setProgressListener or the new method
     * GetObjectRequest#setGeneralProgressListener.
     */
    com.amazonaws.event.ProgressListener progressListener = putObjectRequest.getGeneralProgressListener();
    ProgressListenerCallbackExecutor progressListenerCallbackExecutor = ProgressListenerCallbackExecutor
            .wrapListener(progressListener);

    // If a file is specified for upload, we need to pull some additional
    // information from it to auto-configure a few options
    if (putObjectRequest.getFile() != null) {
        File file = putObjectRequest.getFile();

        // Always set the content length, even if it's already set
        metadata.setContentLength(file.length());

        // Only set the content type if it hasn't already been set
        if (metadata.getContentType() == null) {
            metadata.setContentType(Mimetypes.getInstance().getMimetype(file));
        }

        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream(file);
            byte[] md5Hash = Md5Utils.computeMD5Hash(fileInputStream);
            metadata.setContentMD5(BinaryUtils.toBase64(md5Hash));
        } catch (Exception e) {
            throw new AmazonClientException("Unable to calculate MD5 hash: " + e.getMessage(), e);
        } finally {
            try {
                fileInputStream.close();
            } catch (Exception e) {
            }
        }

        try {
            input = new RepeatableFileInputStream(file);
        } catch (FileNotFoundException fnfe) {
            throw new AmazonClientException("Unable to find file to upload", fnfe);
        }
    }

    Request<PutObjectRequest> request = createRequest(bucketName, key, putObjectRequest, HttpMethodName.PUT);

    if (putObjectRequest.getAccessControlList() != null) {
        addAclHeaders(request, putObjectRequest.getAccessControlList());
    } else if (putObjectRequest.getCannedAcl() != null) {
        request.addHeader(Headers.S3_CANNED_ACL, putObjectRequest.getCannedAcl().toString());
    }

    if (putObjectRequest.getStorageClass() != null) {
        request.addHeader(Headers.STORAGE_CLASS, putObjectRequest.getStorageClass());
    }

    if (putObjectRequest.getRedirectLocation() != null) {
        request.addHeader(Headers.REDIRECT_LOCATION, putObjectRequest.getRedirectLocation());
        if (input == null) {
            input = new ByteArrayInputStream(new byte[0]);
        }
    }

    // Use internal interface to differentiate 0 from unset.
    if (metadata.getRawMetadata().get(Headers.CONTENT_LENGTH) == null) {
        /*
         * There's nothing we can do except for let the HTTP client buffer
         * the input stream contents if the caller doesn't tell us how much
         * data to expect in a stream since we have to explicitly tell
         * Amazon S3 how much we're sending before we start sending any of
         * it.
         */
        log.warn("No content length specified for stream data.  "
                + "Stream contents will be buffered in memory and could result in " + "out of memory errors.");
    }

    if (progressListenerCallbackExecutor != null) {
        com.amazonaws.event.ProgressReportingInputStream progressReportingInputStream = new com.amazonaws.event.ProgressReportingInputStream(
                input, progressListenerCallbackExecutor);
        fireProgressEvent(progressListenerCallbackExecutor,
                com.amazonaws.event.ProgressEvent.STARTED_EVENT_CODE);
    }

    if (!input.markSupported()) {
        int streamBufferSize = Constants.DEFAULT_STREAM_BUFFER_SIZE;
        String bufferSizeOverride = System.getProperty("com.amazonaws.sdk.s3.defaultStreamBufferSize");
        if (bufferSizeOverride != null) {
            try {
                streamBufferSize = Integer.parseInt(bufferSizeOverride);
            } catch (Exception e) {
                log.warn("Unable to parse buffer size override from value: " + bufferSizeOverride);
            }
        }

        input = new RepeatableInputStream(input, streamBufferSize);
    }

    MD5DigestCalculatingInputStream md5DigestStream = null;
    if (metadata.getContentMD5() == null) {
        /*
         * If the user hasn't set the content MD5, then we don't want to
         * buffer the whole stream in memory just to calculate it. Instead,
         * we can calculate it on the fly and validate it with the returned
         * ETag from the object upload.
         */
        try {
            md5DigestStream = new MD5DigestCalculatingInputStream(input);
            input = md5DigestStream;
        } catch (NoSuchAlgorithmException e) {
            log.warn("No MD5 digest algorithm available.  Unable to calculate "
                    + "checksum and verify data integrity.", e);
        }
    }

    if (metadata.getContentType() == null) {
        /*
         * Default to the "application/octet-stream" if the user hasn't
         * specified a content type.
         */
        metadata.setContentType(Mimetypes.MIMETYPE_OCTET_STREAM);
    }

    populateRequestMetadata(request, metadata);
    request.setContent(input);

    if (putObjectRequest instanceof UpdateObjectRequest) {
        request.addHeader(Headers.RANGE, "bytes=" + ((UpdateObjectRequest) putObjectRequest).getUpdateRange());
    }

    ObjectMetadata returnedMetadata = null;
    try {
        returnedMetadata = invoke(request, new S3MetadataResponseHandler(), bucketName, key);
    } catch (AmazonClientException ace) {
        fireProgressEvent(progressListenerCallbackExecutor,
                com.amazonaws.event.ProgressEvent.FAILED_EVENT_CODE);
        throw ace;
    } finally {
        try {
            input.close();
        } catch (Exception e) {
            log.warn("Unable to cleanly close input stream: " + e.getMessage(), e);
        }
    }

    String contentMd5 = metadata.getContentMD5();
    if (md5DigestStream != null) {
        contentMd5 = BinaryUtils.toBase64(md5DigestStream.getMd5Digest());
    }

    // Can't verify MD5 on appends/update (yet).
    if (!(putObjectRequest instanceof UpdateObjectRequest)) {
        if (returnedMetadata != null && contentMd5 != null) {
            byte[] clientSideHash = BinaryUtils.fromBase64(contentMd5);
            byte[] serverSideHash = BinaryUtils.fromHex(returnedMetadata.getETag());

            if (!Arrays.equals(clientSideHash, serverSideHash)) {
                fireProgressEvent(progressListenerCallbackExecutor,
                        com.amazonaws.event.ProgressEvent.FAILED_EVENT_CODE);
                throw new AmazonClientException("Unable to verify integrity of data upload.  "
                        + "Client calculated content hash didn't match hash calculated by Amazon S3.  "
                        + "You may need to delete the data stored in Amazon S3.");
            }
        }
    }

    fireProgressEvent(progressListenerCallbackExecutor, com.amazonaws.event.ProgressEvent.COMPLETED_EVENT_CODE);

    return returnedMetadata;
}

From source file:com.emc.vipr.services.s3.ViPRS3Client.java

License:Open Source License

/**
 * ViPR-specific create bucket command.  This version of the command adds some
 * options specific to EMC ViPR, specifically the ability to set the ViPR project ID
 * and Object Virtual Pool ID on the new bucket.
 * @param createBucketRequest the configuration parameters for the new bucket.
 *//* w  w w  .  j  ava 2  s.c o  m*/
public Bucket createBucket(ViPRCreateBucketRequest createBucketRequest)
        throws AmazonClientException, AmazonServiceException {
    assertParameterNotNull(createBucketRequest,
            "The CreateBucketRequest parameter must be specified when creating a bucket");

    String bucketName = createBucketRequest.getBucketName();
    String region = createBucketRequest.getRegion();
    assertParameterNotNull(bucketName, "The bucket name parameter must be specified when creating a bucket");

    if (bucketName != null)
        bucketName = bucketName.trim();
    BucketNameUtils.validateBucketName(bucketName);

    Request<ViPRCreateBucketRequest> request = createRequest(bucketName, null, createBucketRequest,
            HttpMethodName.PUT);

    if (createBucketRequest.getAccessControlList() != null) {
        addAclHeaders(request, createBucketRequest.getAccessControlList());
    } else if (createBucketRequest.getCannedAcl() != null) {
        request.addHeader(Headers.S3_CANNED_ACL, createBucketRequest.getCannedAcl().toString());
    }

    // ViPR specific: projectId,  vpoolId and fsAccessEnabled.
    if (createBucketRequest.getProjectId() != null) {
        request.addHeader(ViPRConstants.PROJECT_HEADER, createBucketRequest.getProjectId());
    }
    if (createBucketRequest.getVpoolId() != null) {
        request.addHeader(ViPRConstants.VPOOL_HEADER, createBucketRequest.getVpoolId());
    }
    if (createBucketRequest.isFsAccessEnabled()) {
        request.addHeader(ViPRConstants.FS_ACCESS_ENABLED, "true");
    }

    /*
     * If we're talking to a region-specific endpoint other than the US, we
     * *must* specify a location constraint. Try to derive the region from
     * the endpoint.
     */
    if (!(this.endpoint.getHost().equals(Constants.S3_HOSTNAME)) && (region == null || region.isEmpty())) {

        try {
            region = RegionUtils.getRegionByEndpoint(this.endpoint.getHost()).getName();
        } catch (IllegalArgumentException exception) {
            // Endpoint does not correspond to a known region; send the
            // request with no location constraint and hope for the best.
        }

    }

    /*
     * We can only send the CreateBucketConfiguration if we're *not*
     * creating a bucket in the US region.
     */
    if (region != null && !region.toUpperCase().equals(Region.US_Standard.toString())) {
        XmlWriter xml = new XmlWriter();
        xml.start("CreateBucketConfiguration", "xmlns", Constants.XML_NAMESPACE);
        xml.start("LocationConstraint").value(region).end();
        xml.end();

        request.setContent(new ByteArrayInputStream(xml.getBytes()));
    }

    invoke(request, voidResponseHandler, bucketName, null);

    return new Bucket(bucketName);
}

From source file:org.apache.usergrid.apm.util.CrashLogUploadToS3Simulator.java

License:Apache License

public static boolean uploadSimulatedCrashLogsToS3(String appId, String fileName) {
    DeploymentConfig config = DeploymentConfig.geDeploymentConfig();
    AWSCredentials credentials = new BasicAWSCredentials(config.getAccessKey(), config.getSecretKey());
    AmazonS3Client s3Client = new AmazonS3Client(credentials);
    PutObjectRequest putObjectRequest;//w  w  w.ja v  a 2 s. com

    String s3FullFileName = config.getEnvironment() + "/crashlog/" + appId + "/" + fileName;

    try {

        ObjectMetadata metaData = new ObjectMetadata();

        metaData.setHeader(Headers.S3_CANNED_ACL, CannedAccessControlList.AuthenticatedRead);

        putObjectRequest = new PutObjectRequest(config.getS3LogBucket(), s3FullFileName,
                new ByteArrayInputStream(fileName.getBytes("UTF-8")), null);
        PutObjectResult result = s3Client.putObject(putObjectRequest);
        return true;

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return false;
}

From source file:org.apache.usergrid.apm.util.GenerateSimulatedMobileData.java

License:Apache License

public static boolean uploadSimulatedCrashLogsToS3(App app, String fileName) {
    DeploymentConfig config = DeploymentConfig.geDeploymentConfig();
    AWSCredentials credentials = new BasicAWSCredentials(config.getAccessKey(), config.getSecretKey());
    AmazonS3Client s3Client = new AmazonS3Client(credentials);
    PutObjectRequest putObjectRequest;//from   w  ww .ja v a  2 s.c  om

    String s3FullFileName = config.getEnvironment() + "/" + config.getS3CrashLogFolder() + "/"
            + app.getFullAppName() + "/" + fileName;
    String sampleCrashFileName = null;

    if (fileName.endsWith(".crash")) //it's an iOS crash file
        sampleCrashFileName = "ios-crash-log-example.txt";
    else if (fileName.endsWith(".stacktrace"))
        sampleCrashFileName = "android-crash-log-example.txt";
    try {

        ObjectMetadata metaData = new ObjectMetadata();

        metaData.setHeader(Headers.S3_CANNED_ACL, CannedAccessControlList.AuthenticatedRead);

        InputStream is = Thread.currentThread().getContextClassLoader()
                .getResourceAsStream(sampleCrashFileName);

        putObjectRequest = new PutObjectRequest(config.getS3LogBucket(), s3FullFileName, is, null);
        //new ByteArrayInputStream(    //fileName.getBytes("UTF-8")),null);
        PutObjectResult result = s3Client.putObject(putObjectRequest);
        return true;

    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}