使用Java中的Gzip上传到S3

时间:2016-04-17 17:01:31

标签: java amazon-s3

我是Java新手,我正在尝试将大文件(~10GB)上传到Amazon S3。谁能帮助我如何使用GZip outputsteam呢? 我已经阅读了一些文档,但对Byte Streams,Gzip流感到困惑。它们必须一起使用?任何人都可以帮我解决这段代码吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

这个问题本来可以更具体,有几种方法可以解决。一种方法可能如下所示。

该示例取决于commons-iocommons-compress库,并使用java.nio.file包中的类。

public static void compressAndUpload(AmazonS3 s3, InputStream in)
    throws IOException
{
    // Create temp file
    Path tmpPath = Files.createTempFile("prefix", "suffix");

    // Create and write to gzip compressor stream
    OutputStream out = Files.newOutputStream(tmpPath);
    GzipCompressorOutputStream gzOut = new GzipCompressorOutputStream(out);
    IOUtils.copy(in, gzOut);

    // Read content from temp file
    InputStream fileIn = Files.newInputStream(tmpPath);
    long size = Files.size(tmpPath);
    
    ObjectMetadata metadata = new ObjectMetadata();
    metadata.setContentType("application/x-gzip");
    metadata.setContentLength(size);

    // Upload file to S3
    s3.putObject(new PutObjectRequest("bucket", "key", fileIn, metadata));
}

为简洁起见,省略了对流的缓冲,错误处理和关闭。

答案 1 :(得分:0)

看看这个,

Is it possible to gzip and upload this string to Amazon S3 without ever being written to disk?

ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
GZipOuputStream gzipOut = new GZipOutputStream(byteOut);
// write your stuff
byte[] bites = byteOut.toByteArray();
//write the bites to the amazon stream

由于它是一个大文件,您可能需要查看多部分上传