如何从S3下载GZip文件?
我查看了AWS S3 Java SDK – 下载文件帮助和使用Java中的Zip和GZip文件 。
虽然它们提供了分别从S3和GZipped文件下载和处理文件的方法,但这些方法无法处理位于S3中的GZipped文件。 我该怎么办?
目前我有:
try { AmazonS3 s3Client = new AmazonS3Client( new ProfileCredentialsProvider()); String URL = downloadURL.getPrimitiveJavaObject(arg0[0].get()); S3Object fileObj = s3Client.getObject(getBucket(URL), getFile(URL)); BufferedReader fileIn = new BufferedReader(new InputStreamReader( fileObj.getObjectContent())); String fileContent = ""; String line = fileIn.readLine(); while (line != null){ fileContent += line + "\n"; line = fileIn.readLine(); } fileObj.close(); return fileContent; } catch (IOException e) { e.printStackTrace(); return "ERROR IOEXCEPTION"; }
显然,我没有处理文件的压缩特性,我的输出是:
sU 3204 50 5010 20 24 L,( O V M-.NLOU R U <s <# ^ .wߐX %w }C= % J3 . 둚 S ᜑ ZQ T e #sr cdN#瘐:& S BǔJ P <
但是,我无法在上面给出的第二个问题中实现该示例,因为该文件不在本地,它需要从S3下载。
我该怎么办?
我使用Scanner
而不是InputStream
解决了这个问题。
扫描程序采用GZIPInputStream并逐行读取解压缩的文件:
fileObj = s3Client.getObject(new GetObjectRequest(oSummary.getBucketName(), oSummary.getKey())); fileIn = new Scanner(new GZIPInputStream(fileObj.getObjectContent()));
您必须使用GZIPInputStream
来读取GZIP文件
AmazonS3 s3Client = new AmazonS3Client( new ProfileCredentialsProvider()); String URL = downloadURL.getPrimitiveJavaObject(arg0[0].get()); S3Object fileObj = s3Client.getObject(getBucket(URL), getFile(URL)); byte[] buffer = new byte[1024]; int n; FileOutputStream fileOuputStream = new FileOutputStream("temp.gz"); BufferedInputStream bufferedInputStream = new BufferedInputStream( new GZIPInputStream(fileObj.getObjectContent())); GZIPOutputStream gzipOutputStream = new GZIPOutputStream(fileOuputStream); while ((n = bufferedInputStream.read(buffer)) != -1) { gzipOutputStream.write(buffer); } gzipOutputStream.flush(); gzipOutputStream.close();
请尝试这种方式从S3下载GZip文件。
我并不是在寻找这个问题,但我确实想通过实际解释为什么已经提供的解决方案有效来提高这个线程的质量。
不,不是因为建议的扫描仪。 这是因为通过在GZIPInputStream
包装fileObj.getObjectContent()
来解压缩流,该GZIPInputStream
解压缩内容。
删除scanner
但保留GZIPInputStream
,事情仍然有效。
- 使用Java进行AWS S3文件搜索
- S3:如果由其他用户创建,则用户无法访问自己的s3存储桶中的对象
- amazon s3上传文件超时
- 将BufferedImage对象作为文件保存到Amazon S3
- com.amazonaws.services.s3.model.AmazonS3Exception:Forbidden(Service:Amazon S3; Status Code:403; Error Code:403 Forbidden; Request ID:XXXXXXXX)
- Spring Boot亚马逊AWS S3存储桶文件下载 – 访问被拒绝
- Amazon Web Services(AWS)S3 Java创建子目录(对象)
- 从S3下载文件> 3Gb失败,出现“SocketTimeoutException:Read timed out”
- AWS S3 Java:doesObjectExist导致403:FORBIDDEN