AWS S3 Java SDK - Download file help

前端 未结 5 1484
臣服心动
臣服心动 2020-12-13 03:59

The code below only works for downloading text files from a bucket in S3. This does not work for an image. Is there an easier way to manage downloads/types using the AWS S

相关标签:
5条回答
  • 2020-12-13 04:40

    There is even much simpler way to get this. I used below snippet. Got reference from http://docs.ceph.com/docs/mimic/radosgw/s3/java/

    AmazonS3 s3client = AmazonS3ClientBuilder.standard()
                    .withCredentials(new AWSStaticCredentialsProvider(credentials)).withRegion(Regions.US_EAST_1).build();
    
    s3client.getObject(
                    new GetObjectRequest("nomad-prop-pics", "Documents/1.pdf"),
                    new File("D:\\Eka-Contract-Physicals-Dev\\Contracts-Physicals\\utility-service\\downlods\\1.pdf")
        );
    
    0 讨论(0)
  • 2020-12-13 04:45

    Instead of Reader and Writer classes you should be using InputStream and OutputStream classes:

    InputStream reader = new BufferedInputStream(
       object.getObjectContent());
    File file = new File("localFilename");      
    OutputStream writer = new BufferedOutputStream(new FileOutputStream(file));
    
    int read = -1;
    
    while ( ( read = reader.read() ) != -1 ) {
        writer.write(read);
    }
    
    writer.flush();
    writer.close();
    reader.close();
    
    0 讨论(0)
  • 2020-12-13 04:46

    Though the code written in Mauricio's answer will work - and his point about streams is of course correct - Amazon offers a quicker way to save files in their SDK. I don't know if it wasn't available in 2011 or not, but it is now.

    AmazonS3Client s3Client = new AmazonS3Client(myCredentials);
    
    File localFile = new File("localFilename");
    
    ObjectMetadata object = s3Client.getObject(new GetObjectRequest("bucket", "s3FileName"), localFile);
    
    0 讨论(0)
  • 2020-12-13 04:51

    Eyals answer gets you half way there but its not all that clear so I will clarify.

    AmazonS3Client s3Client = new AmazonS3Client(myCredentials);
    
    //This is where the downloaded file will be saved
    File localFile = new File("localFilename");
    
    //This returns an ObjectMetadata file but you don't have to use this if you don't want 
    s3Client.getObject(new GetObjectRequest(bucketName, id.getId()), localFile);
    
    //Now your file will have your image saved 
    boolean success = localFile.exists() && localFile.canRead(); 
    
    0 讨论(0)
  • 2020-12-13 04:53

    Use java.nio.file.Files to copy S3Object to local file.

    public File getFile(String fileName) throws Exception {
        if (StringUtils.isEmpty(fileName)) {
            throw new Exception("file name can not be empty");
        }
        S3Object s3Object = amazonS3.getObject("bucketname", fileName);
        if (s3Object == null) {
            throw new Exception("Object not found");
        }
        File file = new File("you file path");
        Files.copy(s3Object.getObjectContent(), file.toPath());
        inputStream.close();
        return file;
    }
    
    0 讨论(0)
提交回复
热议问题