我是Java新手,我正在尝试将大文件(~10GB)上传到Amazon S3。谁能帮助我如何使用GZip outputsteam呢? 我已经阅读了一些文档,但对Byte Streams,Gzip流感到困惑。它们必须一起使用?任何人都可以帮我解决这段代码吗?
提前致谢。
答案 0 :(得分:1)
这个问题本来可以更具体,有几种方法可以解决。一种方法可能如下所示。
该示例取决于commons-io
和commons-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
由于它是一个大文件,您可能需要查看多部分上传