Я пытаюсь использовать akka-streams и akka-http и библиотеку alpakka для загрузки/выгрузки файлов на Amazon S3. Я вижу две проблемы, которые могут быть связаны...
- Я могу скачивать только очень маленькие файлы, самый большой 8kb.
Я не могу загружать большие файлы. Это не удается с сообщением
Ошибка при обработке запроса: «Источник подпотока не материализовался в течение 5000 миллисекунд». Завершение с ответом 500 Internal Server Error. Чтобы изменить поведение обработки исключений по умолчанию, укажите пользовательский ExceptionHandler. akka.stream.impl.SubscriptionTimeoutException: источник подпотока не материализовался за 5000 миллисекунд
Вот мои маршруты
pathEnd {
post {
fileUpload("attachment") {
case (metadata, byteSource) => {
val writeResult: Future[MultipartUploadResult] = byteSource.runWith(client.multipartUpload("bucketname", key))
onSuccess(writeResult) { result =>
complete(result.location.toString())
}
}
}
}
} ~
path("key" / Segment) {
(sourceSystem, sourceTable, sourceId) =>
get {
val result: Future[ByteString] =
client.download("bucketname", key).runWith(Sink.head)
onSuccess(result) {
complete(_)
}
}
}
Попытка загрузить файл, скажем, 100 КБ, в конечном итоге приведет к получению усеченной версии файла, обычно размером около 16-25 КБ. Любая помощь приветствуется.
Изменить: по поводу проблемы с загрузкой я принял предложение Стефано и получил
[error] found : akka.stream.scaladsl.Source[akka.util.ByteString,akka.NotUsed]
[error] required: akka.http.scaladsl.marshalling.ToResponseMarshallable
Это заставило его работать
complete(HttpEntity(ContentTypes.`application/octet-stream`, client.download("bucketname", key).runWith(Sink.head)))