我的问题与在流中读取S3文件无关。
我的问题更具体到阅读zipfile(多个文件)和解压缩& amp;使用文件名提取内容并保存在S3文件夹中。
我正在尝试阅读S3 zip文件,并使用Scala将内容解压缩为单独的小型单个文件。我能够使用下面的代码实现较小文件的功能,但较大的文件(10mb以上)无法提取数据。无法扩展现有的缓冲区大小。如果有其他方法,请告诉我。
def pr_extract(object_Key :String, bucket_Name:String, folder:String,s3Client: com.amazonaws.services.s3.AmazonS3Client) : Unit =
{
val buffer = new Array[Byte](12582912)
val awsCreds = new BasicAWSCredentials(access_Key, secret_Key)
val s3Client = new AmazonS3Client(awsCreds)
s3Client.setEndpoint("xxxxxxxxxxxxxx")
val s3object = s3Client.getObject(new GetObjectRequest(bucket_Name, object_Key))
val zis = new ZipInputStream(s3object.getObjectContent())
var entry = zis.getNextEntry()
while (entry != null) {
val fileName = entry.getName
val outputStream = new ByteArrayOutputStream()
val len = zis.read(buffer)
while (zis.read(buffer) > 0) {
outputStream.write(buffer, 0, len)
}
val is = new ByteArrayInputStream(outputStream.toByteArray())
val meta = new ObjectMetadata()
meta.setContentLength(outputStream.size())
meta.setContentType("application/csv")
s3Client.putObject(bucket_Name, FilenameUtils.getFullPath(folder) + fileName, is, meta)
is.close
outputStream.close()
entry = zis.getNextEntry()
}
}