Example usage for com.amazonaws.services.s3.model ObjectListing getObjectSummaries

List of usage examples for com.amazonaws.services.s3.model ObjectListing getObjectSummaries

Introduction

In this page you can find the example usage for com.amazonaws.services.s3.model ObjectListing getObjectSummaries.

Prototype

public List<S3ObjectSummary> getObjectSummaries() 

Source Link

Document

Gets the list of object summaries describing the objects stored in the S3 bucket.

Usage

From source file:fr.eurecom.hybris.kvs.drivers.AmazonKvs.java

License:Apache License

public List<String> list() throws IOException {
    try {/*w ww.  j ava 2  s.  co  m*/
        List<String> keys = new ArrayList<String>();
        ObjectListing objectListing = this.s3.listObjects(this.rootContainer);
        boolean loop = false;

        do {
            for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries())
                keys.add(objectSummary.getKey());

            if (objectListing.isTruncated()) {
                objectListing = this.s3.listNextBatchOfObjects(objectListing);
                loop = true;
            } else
                loop = false;

        } while (loop);

        return keys;
    } catch (AmazonClientException e) {
        throw new IOException(e);
    }
}

From source file:gobblin.aws.AWSSdkClient.java

License:Apache License

/***
 * Get list of S3 objects within a S3 bucket qualified by prefix path
 *
 * @param bucketName S3 bucket name// w w w  . j  av a2s  . c  o  m
 * @param prefix S3 prefix to object
 * @return List of {@link S3ObjectSummary} objects within the bucket qualified by prefix path
 */
public List<S3ObjectSummary> listS3Bucket(String bucketName, String prefix) {

    final AmazonS3 amazonS3 = getS3Client();

    final ListObjectsRequest listObjectsRequest = new ListObjectsRequest().withBucketName(bucketName)
            .withPrefix(prefix);

    final ObjectListing objectListing = amazonS3.listObjects(listObjectsRequest);
    LOGGER.info("S3 bucket listing for bucket: " + bucketName + " with prefix: " + prefix + " is: "
            + objectListing);

    return objectListing.getObjectSummaries();
}

From source file:gov.noaa.pfel.coastwatch.util.FileVisitorDNLS.java

License:Open Source License

/**
 * This is a convenience method for using this class. 
 * <p>This works with Amazon AWS S3 bucket URLs. Internal /'s in the keys will be
 * treated as folder separators. If there aren't any /'s, all the keys will 
 * be in the root directory.//w  w w . j a  va2s.  c o  m
 *
 * @param tDir The starting directory, with \\ or /, with or without trailing slash.  
 *    The resulting directoryPA will contain dirs with matching slashes and trailing slash.
 * @param tPathRegex a regex to constrain which subdirs to include.
 *   This is ignored if recursive is false.
 *   null or "" is treated as .* (i.e., match everything).
 * @param tDirectoriesToo if true, each directory name will get its own rows 
 *   in the results.
 * @return a table with columns with DIRECTORY, NAME, LASTMODIFIED, and SIZE columns.
 *    LASTMODIFIED and SIZE are LongArrays -- For directories when the values
 *    are otherwise unknown, the value will be Long.MAX_VALUE.
 *    If directoriesToo=true, the original dir won't be included and any 
 *    directory's file NAME will be "".
 * @throws IOException if trouble
 */
public static Table oneStep(String tDir, String tFileNameRegex, boolean tRecursive, String tPathRegex,
        boolean tDirectoriesToo) throws IOException {
    long time = System.currentTimeMillis();

    //is tDir an http URL?
    if (tDir.matches(FileVisitorDNLS.HTTP_REGEX)) {

        //Is it an S3 bucket with "files"?
        //If testing a "dir", url should have a trailing slash.
        Matcher matcher = AWS_S3_PATTERN.matcher(File2.addSlash(tDir)); //force trailing slash
        if (matcher.matches()) {
            //http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html
            //If files have file-system-like names, e.g., 
            //  http://bucketname.s3.amazonaws.com/dir1/dir2/fileName.ext)
            //  http://nasanex.s3.amazonaws.com/NEX-DCP30/BCSD/rcp26/mon/atmos/tasmin/r1i1p1/v1.0/CONUS/tasmin_amon_BCSD_rcp26_r1i1p1_CONUS_NorESM1-M_209601-209912.nc
            //  you still can't request just dir2 info because they aren't directories.
            //  They are just object keys with internal slashes. 
            //So specify prefix in request.
            Table table = makeEmptyTable();
            StringArray directoryPA = (StringArray) table.getColumn(DIRECTORY);
            StringArray namePA = (StringArray) table.getColumn(NAME);
            LongArray lastModifiedPA = (LongArray) table.getColumn(LASTMODIFIED);
            LongArray sizePA = (LongArray) table.getColumn(SIZE);

            String bucketName = matcher.group(1);
            String prefix = matcher.group(2);
            String baseURL = tDir.substring(0, matcher.start(2));
            AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());
            try {
                if (verbose)
                    String2.log("FileVisitorDNLS.oneStep getting info from AWS S3 at" + "\nURL=" + tDir);
                //"\nbucket=" + bucketName + " prefix=" + prefix);

                //I wanted to generate lastMod for dir based on lastMod of files
                //but it would be inconsistent for different requests (recursive, fileNameRegex).
                //so just a set of dir names.
                HashSet<String> dirHashSet = new HashSet();
                ListObjectsRequest listObjectsRequest = new ListObjectsRequest().withBucketName(bucketName)
                        .withPrefix(prefix);
                ObjectListing objectListing;
                do {
                    objectListing = s3client.listObjects(listObjectsRequest);
                    for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
                        String keyFullName = objectSummary.getKey();
                        String keyDir = File2.getDirectory(baseURL + keyFullName);
                        String keyName = File2.getNameAndExtension(keyFullName);
                        if (debugMode)
                            String2.log(
                                    "keyFullName=" + keyFullName + "\nkeyDir=" + keyDir + "\n  tDir=" + tDir);
                        if (keyDir.startsWith(tDir) && //it should
                                (tRecursive || keyDir.length() == tDir.length())) {

                            //store this dir
                            if (tDirectoriesToo) {
                                //S3 only returns object keys. I must infer/collect directories.
                                //Store this dir and parents back to tDir.
                                String choppedKeyDir = keyDir;
                                while (choppedKeyDir.length() >= tDir.length()) {
                                    if (!dirHashSet.add(choppedKeyDir))
                                        break; //hash set already had this, so will already have parents

                                    //chop off last subdirectory
                                    choppedKeyDir = File2.getDirectory(
                                            choppedKeyDir.substring(0, choppedKeyDir.length() - 1)); //remove trailing /
                                }
                            }

                            //store this file's information
                            //Sometimes directories appear as files are named "" with size=0.
                            //I don't store those as files.
                            if (debugMode)
                                String2.log("keyName=" + keyFullName + "\n tFileNameRegex=" + tFileNameRegex
                                        + " matches=" + keyName.matches(tFileNameRegex));
                            if (keyName.length() > 0 && keyName.matches(tFileNameRegex)) {
                                directoryPA.add(keyDir);
                                namePA.add(keyName);
                                lastModifiedPA.add(objectSummary.getLastModified().getTime()); //epoch millis
                                sizePA.add(objectSummary.getSize()); //long
                            }
                        }
                    }
                    listObjectsRequest.setMarker(objectListing.getNextMarker());
                } while (objectListing.isTruncated());

                //add directories to the table
                if (tDirectoriesToo) {
                    Iterator<String> it = dirHashSet.iterator();
                    while (it.hasNext()) {
                        directoryPA.add(it.next());
                        namePA.add("");
                        lastModifiedPA.add(Long.MAX_VALUE);
                        sizePA.add(Long.MAX_VALUE);
                    }
                }

                table.leftToRightSortIgnoreCase(2);
                return table;

            } catch (AmazonServiceException ase) {
                throw new IOException("AmazonServiceException: " + ase.getErrorType() + " ERROR, HTTP Code="
                        + ase.getStatusCode() + ": " + ase.getMessage(), ase);
            } catch (AmazonClientException ace) {
                throw new IOException(ace.getMessage(), ace);
            }
        }

        //HYRAX before THREDDS
        //http://dods.jpl.nasa.gov/opendap/ocean_wind/ccmp/L3.5a/data/flk/1988/
        matcher = HYRAX_PATTERN.matcher(tDir);
        if (matcher.matches()) {
            try {
                if (verbose)
                    String2.log("FileVisitorDNLS.oneStep getting info from Hyrax at" + "\nURL=" + tDir);
                Table table = makeEmptyTable();
                StringArray directoryPA = (StringArray) table.getColumn(DIRECTORY);
                StringArray namePA = (StringArray) table.getColumn(NAME);
                LongArray lastModifiedPA = (LongArray) table.getColumn(LASTMODIFIED);
                LongArray sizePA = (LongArray) table.getColumn(SIZE);

                DoubleArray lastModDA = new DoubleArray();
                addToHyraxUrlList(tDir, tFileNameRegex, tRecursive, tPathRegex, tDirectoriesToo, namePA,
                        lastModDA, sizePA);
                lastModifiedPA.append(lastModDA);
                int n = namePA.size();
                for (int i = 0; i < n; i++) {
                    String fn = namePA.get(i);
                    directoryPA.add(File2.getDirectory(fn));
                    namePA.set(i, File2.getNameAndExtension(fn));
                }

                table.leftToRightSortIgnoreCase(2);
                return table;
            } catch (Throwable t) {
                throw new IOException(t.getMessage(), t);
            }
        }

        //THREDDS
        matcher = THREDDS_PATTERN.matcher(tDir);
        if (matcher.matches()) {
            try {
                if (verbose)
                    String2.log("FileVisitorDNLS.oneStep getting info from THREDDS at" + "\nURL=" + tDir);
                Table table = makeEmptyTable();
                StringArray directoryPA = (StringArray) table.getColumn(DIRECTORY);
                StringArray namePA = (StringArray) table.getColumn(NAME);
                LongArray lastModifiedPA = (LongArray) table.getColumn(LASTMODIFIED);
                LongArray sizePA = (LongArray) table.getColumn(SIZE);

                DoubleArray lastModDA = new DoubleArray();
                addToThreddsUrlList(tDir, tFileNameRegex, tRecursive, tPathRegex, tDirectoriesToo, namePA,
                        lastModDA, sizePA);
                lastModifiedPA.append(lastModDA);
                int n = namePA.size();
                for (int i = 0; i < n; i++) {
                    String fn = namePA.get(i);
                    directoryPA.add(File2.getDirectory(fn));
                    namePA.set(i, File2.getNameAndExtension(fn));
                }

                table.leftToRightSortIgnoreCase(2);
                return table;
            } catch (Throwable t) {
                throw new IOException(t.getMessage(), t);
            }
        }

        //default: Apache-style WAF
        try {
            if (verbose)
                String2.log("FileVisitorDNLS.oneStep getting info from Apache-style WAF at" + "\nURL=" + tDir);
            Table table = makeEmptyTable();
            StringArray directorySA = (StringArray) table.getColumn(DIRECTORY);
            StringArray nameSA = (StringArray) table.getColumn(NAME);
            LongArray lastModLA = (LongArray) table.getColumn(LASTMODIFIED);
            LongArray sizeLA = (LongArray) table.getColumn(SIZE);

            addToWAFUrlList(tDir, tFileNameRegex, tRecursive, tPathRegex, tDirectoriesToo, directorySA, nameSA,
                    lastModLA, sizeLA);
            table.leftToRightSortIgnoreCase(2);
            return table;
        } catch (Throwable t) {
            throw new IOException(t.getMessage(), t);
        }
    }

    //local files
    //follow symbolic links: https://docs.oracle.com/javase/7/docs/api/java/nio/file/FileVisitor.html
    //But this doesn't follow Windows symbolic link .lnk's:
    //  http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4237760
    FileVisitorDNLS fv = new FileVisitorDNLS(tDir, tFileNameRegex, tRecursive, tPathRegex, tDirectoriesToo);
    EnumSet<FileVisitOption> opts = EnumSet.of(FileVisitOption.FOLLOW_LINKS);
    Files.walkFileTree(FileSystems.getDefault().getPath(tDir), opts, //follow symbolic links
            Integer.MAX_VALUE, //maxDepth
            fv);
    fv.table.leftToRightSortIgnoreCase(2);
    if (verbose)
        String2.log("FileVisitorDNLS.oneStep(local) finished successfully. n=" + fv.directoryPA.size()
                + " time=" + (System.currentTimeMillis() - time) + "ms");
    return fv.table;
}

From source file:ics.uci.edu.amazons3.S3Sample.java

License:Open Source License

public static void main(String[] args) throws IOException {
    /*/*from   www  . j a va2 s . c  o  m*/
     * This credentials provider implementation loads your AWS credentials
     * from a properties file at the root of your classpath.
     * 
     * Important: Be sure to fill in your AWS access credentials in the
     *            AwsCredentials.properties file before you try to run this
     *            sample.
     * http://aws.amazon.com/security-credentials
     */
    final AmazonS3 s3 = new AmazonS3Client(
            new BasicAWSCredentials("AKIAJTW5BOY6EXOGV2YQ", "PDcnFYIf9Hdo9GsKTEjLXretZ3yEg4mRCDQKjxu6"));

    String bucketName = "my-first-s3-bucket-" + UUID.randomUUID();
    String key = "MyObjectKey";

    System.out.println("===========================================");
    System.out.println("Getting Started with Amazon S3");
    System.out.println("===========================================\n");

    try {
        /*
         * Create a new S3 bucket - Amazon S3 bucket names are globally unique,
         * so once a bucket name has been taken by any user, you can't create
         * another bucket with that same name.
         *
         * You can optionally specify a location for your bucket if you want to
         * keep your data closer to your applications or users.
         */
        System.out.println("Creating bucket " + bucketName + "\n");
        s3.createBucket(bucketName);

        /*
         * List the buckets in your account
         */
        System.out.println("Listing buckets");
        for (Bucket bucket : s3.listBuckets()) {
            System.out.println(" - " + bucket.getName());
        }
        System.out.println();

        /*
         * Upload an object to your bucket - You can easily upload a file to
         * S3, or upload directly an InputStream if you know the length of
         * the data in the stream. You can also specify your own metadata
         * when uploading to S3, which allows you set a variety of options
         * like content-type and content-encoding, plus additional metadata
         * specific to your applications.
         */
        System.out.println("Uploading a new object to S3 from a file\n");
        s3.putObject(new PutObjectRequest(bucketName, key, createSampleFile()));

        /*
         * Download an object - When you download an object, you get all of
         * the object's metadata and a stream from which to read the contents.
         * It's important to read the contents of the stream as quickly as
         * possibly since the data is streamed directly from Amazon S3 and your
         * network connection will remain open until you read all the data or
         * close the input stream.
         *
         * GetObjectRequest also supports several other options, including
         * conditional downloading of objects based on modification times,
         * ETags, and selectively downloading a range of an object.
         */
        System.out.println("Downloading an object");
        S3Object object = s3.getObject(new GetObjectRequest(bucketName, key));
        System.out.println("Content-Type: " + object.getObjectMetadata().getContentType());
        displayTextInputStream(object.getObjectContent());

        /*
         * List objects in your bucket by prefix - There are many options for
         * listing the objects in your bucket.  Keep in mind that buckets with
         * many objects might truncate their results when listing their objects,
         * so be sure to check if the returned object listing is truncated, and
         * use the AmazonS3.listNextBatchOfObjects(...) operation to retrieve
         * additional results.
         */
        System.out.println("Listing objects");
        ObjectListing objectListing = s3
                .listObjects(new ListObjectsRequest().withBucketName(bucketName).withPrefix("My"));
        for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
            System.out.println(
                    " - " + objectSummary.getKey() + "  " + "(size = " + objectSummary.getSize() + ")");
        }
        System.out.println();

        /*
         * Delete an object - Unless versioning has been turned on for your bucket,
         * there is no way to undelete an object, so use caution when deleting objects.
         */
        System.out.println("Deleting an object\n");
        s3.deleteObject(bucketName, key);

        /*
         * Delete a bucket - A bucket must be completely empty before it can be
         * deleted, so remember to delete any objects from your buckets before
         * you try to delete them.
         */
        System.out.println("Deleting bucket " + bucketName + "\n");
        s3.deleteBucket(bucketName);
    } catch (AmazonServiceException ase) {
        System.out.println("Caught an AmazonServiceException, which means your request made it "
                + "to Amazon S3, but was rejected with an error response for some reason.");
        System.out.println("Error Message:    " + ase.getMessage());
        System.out.println("HTTP Status Code: " + ase.getStatusCode());
        System.out.println("AWS Error Code:   " + ase.getErrorCode());
        System.out.println("Error Type:       " + ase.getErrorType());
        System.out.println("Request ID:       " + ase.getRequestId());
    } catch (AmazonClientException ace) {
        System.out.println("Caught an AmazonClientException, which means the client encountered "
                + "a serious internal problem while trying to communicate with S3, "
                + "such as not being able to access the network.");
        System.out.println("Error Message: " + ace.getMessage());
    }
}

From source file:imperial.modaclouds.monitoring.datacollectors.monitors.DetailedCostMonitor.java

License:BSD License

@Override
public void run() {

    String accessKeyId = null;//from   w  w w.j  av a2  s  . c  o m

    String secretKey = null;

    ObjectListing objects = null;

    AmazonS3Client s3Client = null;

    String key = null;

    long startTime = 0;

    while (!dcmt.isInterrupted()) {

        if (System.currentTimeMillis() - startTime > 10000) {

            cost_nonspot = new HashMap<String, Double>();

            cost_spot = new HashMap<String, Double>();

            for (String metric : getProvidedMetrics()) {
                try {
                    VM resource = new VM(Config.getInstance().getVmType(), Config.getInstance().getVmId());
                    if (dcAgent.shouldMonitor(resource, metric)) {
                        Map<String, String> parameters = dcAgent.getParameters(resource, metric);

                        accessKeyId = parameters.get("accessKey");
                        secretKey = parameters.get("secretKey");
                        bucketName = parameters.get("bucketName");
                        filePath = parameters.get("filePath");
                        period = Integer.valueOf(parameters.get("samplingTime")) * 1000;
                    }
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                } catch (ConfigurationException e) {
                    e.printStackTrace();
                }
            }

            startTime = System.currentTimeMillis();

            AWSCredentials credentials = new BasicAWSCredentials(accessKeyId, secretKey);
            s3Client = new AmazonS3Client(credentials);

            objects = s3Client.listObjects(bucketName);

            key = "aws-billing-detailed-line-items-with-resources-and-tags-";
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
            String date = sdf.format(new Date());
            key = key + date + ".csv.zip";

        }

        String fileName = null;
        do {
            for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) {
                System.out.println(objectSummary.getKey() + "\t" + objectSummary.getSize() + "\t"
                        + StringUtils.fromDate(objectSummary.getLastModified()));
                if (objectSummary.getKey().contains(key)) {
                    fileName = objectSummary.getKey();
                    s3Client.getObject(new GetObjectRequest(bucketName, fileName),
                            new File(filePath + fileName));
                    break;
                }
            }
            objects = s3Client.listNextBatchOfObjects(objects);
        } while (objects.isTruncated());

        try {
            ZipFile zipFile = new ZipFile(filePath + fileName);
            zipFile.extractAll(filePath);
        } catch (ZipException e) {
            e.printStackTrace();
        }

        String csvFileName = fileName.replace(".zip", "");

        AnalyseFile(filePath + csvFileName);

        try {
            Thread.sleep(period);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            break;
        }

    }
}

From source file:internal.diff.aws.service.AmazonS3DirectoryMetadataServiceImpl.java

License:Apache License

public void populateMetadata(DirectoryMetadata directoryMetadata, String bucketName, String prefix) {

    String marker = null;// w  w  w.  j a va  2s. c o m

    do {
        ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName, prefix, marker, "/", null);

        ObjectListing objectListing = this.amazonS3Client.listObjects(listObjectsRequest);

        for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {

            if (objectSummary.getKey().equals(prefix)) {
                continue;
            }

            FileMetadata file = new FileMetadata();

            file.setName(objectSummary.getKey().substring(prefix.length()));
            file.setSizeInBytes(objectSummary.getSize());

            if (objectSummary.getETag().contains("-")) {
                file.addChecksum(ChecksumType.S3_MULTIPART_ETAG, objectSummary.getETag());
            } else {
                file.addChecksum(ChecksumType.MD5, objectSummary.getETag());
            }

            directoryMetadata.addFile(file);
        }

        for (String subdirectoryPath : objectListing.getCommonPrefixes()) {

            DirectoryMetadata subdirectory = new DirectoryMetadata();
            subdirectory.setName(subdirectoryPath.substring(prefix.length(), subdirectoryPath.length() - 1));

            directoryMetadata.addSubdirectory(subdirectory);

            populateMetadata(subdirectory, bucketName, subdirectoryPath);
        }

        marker = objectListing.getNextMarker();
    } while (marker != null);
}

From source file:io.andromeda.logcollector.S3FileReader.java

License:Apache License

@Override
public Observable<String> listDirectory(String path) {
    return Observable.defer(() -> {
        try {/*from w ww .j ava  2  s.co  m*/
            ParsePath parsePath = new ParsePath(path).invoke();
            if (parsePath.isAvailable())
                return Observable.empty();
            ObjectListing objectListing = s3.listObjects(new ListObjectsRequest()
                    .withBucketName(parsePath.getBucket()).withPrefix(parsePath.getKey()));
            return Observable.from(objectListing.getObjectSummaries())
                    .filter(objectSummary -> !Pattern.matches(".*\\/$", objectSummary.getKey()))
                    .map(S3ObjectSummary::getKey);
        } catch (AmazonClientException e) {
            return Observable.error(e);
        }

    });
}

From source file:io.crate.execution.engine.collect.files.S3FileInput.java

License:Apache License

private void addKeyUris(List<URI> uris, ObjectListing list, URI uri, Predicate<URI> uriPredicate) {
    List<S3ObjectSummary> summaries = list.getObjectSummaries();
    for (S3ObjectSummary summary : summaries) {
        String key = summary.getKey();
        if (!key.endsWith("/")) {
            URI keyUri = uri.resolve("/" + key);
            if (uriPredicate.test(keyUri)) {
                uris.add(keyUri);// w  w w .  jav  a  2s.c  o  m
                if (logger.isDebugEnabled()) {
                    logger.debug("{}", keyUri);
                }
            }
        }
    }
}

From source file:io.crate.operation.collect.files.S3FileInput.java

License:Apache License

private void addKeyUris(List<URI> uris, ObjectListing list, URI uri, Predicate<URI> uriPredicate) {
    List<S3ObjectSummary> summaries = list.getObjectSummaries();
    for (S3ObjectSummary summary : summaries) {
        String key = summary.getKey();
        if (!key.endsWith("/")) {
            URI keyUri = uri.resolve("/" + key);
            if (uriPredicate.apply(keyUri)) {
                uris.add(keyUri);/*ww w .j  a  va2  s .  com*/
                if (logger.isDebugEnabled()) {
                    logger.debug("{}", keyUri);
                }
            }
        }
    }
}

From source file:io.dockstore.webservice.core.tooltester.ToolTesterS3Client.java

License:Apache License

public List<ToolTesterLog> getToolTesterLogs(String toolId, String toolVersionName)
        throws UnsupportedEncodingException {
    String key = convertToolIdToPartialKey(toolId) + "/"
            + URLEncoder.encode(toolVersionName, StandardCharsets.UTF_8.name());
    ObjectListing listing = s3.listObjects(bucketName, key);
    List<S3ObjectSummary> summaries = listing.getObjectSummaries();
    while (listing.isTruncated()) {
        listing = s3.listNextBatchOfObjects(listing);
        summaries.addAll(listing.getObjectSummaries());
    }/*from  w  w  w  . ja va  2 s  .c om*/
    return convertObjectListingToTooltesterLogs(listing);
}