如何获取从android中的amazon S3检索到的对象的元数据?

时间:2013-11-28 08:47:48

标签: android amazon-web-services amazon-s3

我正在从亚马逊s3中检索一个对象。如何在android中获取检索到的对象的元数据?从元数据中,我想知道该对象是图像还是非图像(如pdf,csv,...)

感谢您的帮助。

我使用以下代码获取文件夹下的名称列表。

            AmazonS3Client s3Client;
        s3Client = new AmazonS3Client(new BasicAWSCredentials(
                Constants.ACCESS_KEY_ID, Constants.SECRET_KEY));

        ObjectListing objListOfPath = s3Client.listObjects(
                Constants.getPictureBucket(), path);
        List<S3ObjectSummary> keyListOfObjectSummaries = objListOfPath
                .getObjectSummaries();
        ObjectListing next = s3Client.listNextBatchOfObjects(objListOfPath);
        keyListOfObjectSummaries.addAll(next.getObjectSummaries());
        System.out.println("keyListOfObjectSummaries size() "
                + keyListOfObjectSummaries.size());

        ArrayList<String> arrListImageName = new ArrayList<String>();
        if (keyListOfObjectSummaries.size() > 0) {

            for (int i = 0; i < keyListOfObjectSummaries.size(); i++) {
                String imagePath = keyListOfObjectSummaries.get(i).getKey();
                                    arrListImageName.add(strImageName);
            }

            for (int i = 0; i < arrListImageName.size(); i++) {
                System.out.println("Index " + i + " image Name "
                        + arrListImageName.get(i));
                String strReceiptImageName = arrListImageName.get(i);
                String strReceiptNameExtension = extractReceiptNameExtension(arrListImageName.get(i));


                S3Object objectReceiptFromAmazonS3 = s3Client.getObject(
                        Constants.PICTURE_BUCKET, keyListOfObjectSummaries
                                .get(i).getKey());
                InputStream inputStreamReceiptObject = objectReceiptFromAmazonS3
                        .getObjectContent();

解决方案:

System.out.println("CONTENT TYPE " +objectReceiptFromAmazonS3.getObjectMetadata().getContentType());

感谢Harshit和sanket!

2 个答案:

答案 0 :(得分:2)

这对我来说很有用,可以从一个简单的servlet下载S3中托管的文件。

private static final int BYTES_DOWNLOAD = 1024;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String key = request.getParameter("key");
    HttpSession session = request.getSession();
    String bucketname = (String) session.getAttribute("BUCKETNAME");
    AmazonS3 s3 = new AmazonS3Client(Constants.credentials);
    Region usWest2 = Region.getRegion(Regions.US_WEST_2);
    s3.setRegion(usWest2);
    S3Object object = s3.getObject(new GetObjectRequest(bucketname, key));        
    response.setContentType(object.getObjectMetadata().getContentType());
    response.setHeader("Content-Disposition","attachment;filename="+object.getKey());
    InputStream is = object.getObjectContent();int read=0;
byte[] bytes = new byte[BYTES_DOWNLOAD];
OutputStream os = response.getOutputStream(); 
while((read = is.read(bytes))!= -1){
    os.write(bytes, 0, read);
}
os.flush();
os.close(); 

}

答案 1 :(得分:1)

使用这几行:

ObjectMetadata metaData = new ObjectMetadata(); 
metaData.addUserMetadata("key", key of your file);
System.out.println("Content type is========"+metaData.getContentType());

这可能对你有帮助..