读取S3 zip文件并将内容解压缩为单独的文件

时间:2018-01-29 16:04:50

标签: scala unzip

我的问题与在流中读取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()
      }
    }

0 个答案:

没有答案