Загрузите файл pdf из s3, используя akka-stream-alpakka, и сохраните его в виде массива байтов. - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь загрузить pdf-файл с S3, используя соединитель akka-stream-alpakka. У меня есть путь s3, и я пытаюсь скачать pdf с помощью метода-обертки над alpakka s3Client.

def getSource(s3Path: String): Source[ByteString, NotUsed] = {
    val (source, _) = s3Client.download(s3Bucket, s3Path)
    source
  }

Из моего основного кода я вызываю вышеуказанный метод, получаю исходный код pdf и могу загрузить PDF. Однако вместо загрузки файла мне теперь нужно иметь pdf в виде массива байтов в памяти, чтобы я мог выполнить какую-то другую обработку.

Мой текущий код выглядит примерно так

val filePath = "certificate.pdf"
val value1: Future[IOResult] =
  awsS3Bucket
    .getSource(data.s3PdfPath)
    .toMat(FileIO.toPath(Paths.get(filePath)))(Keep.right)
    .run()

Я пробовал несколько комбинаций, но безуспешно. Может кто-нибудь указать, какие изменения необходимо внести в приведенный выше код, чтобы иметь тип value1 Future[Array[Bytes]] вместо Future[IOResult].

TIA.

1 Ответ

1 голос
/ 06 февраля 2020

Я думаю, что IOResult - это только состояние загрузки:

final case class IOResult(count: Long, status: Try[Done])

Так что, если вы хотите получить массив [байтов], вам нужно загрузить pdf в память после завершения загрузки.

value1.onComplete {
  case Success(_) => {
    // load pfile into MEM here
  }
  case Failure(e) => {
    e.printStackTrace()

  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...