J'essaie d'utiliser akka-streams et akka-http et la bibliothèque alpakka pour télécharger/télécharger des fichiers sur Amazon S3. Je vois deux problèmes qui pourraient être liés ...Problèmes de téléchargement/téléchargement de fichiers dans akka-http/akka-streams
- Je ne peux télécharger que de très petits fichiers, le plus grand 8kb.
Je ne peux pas télécharger de fichiers plus volumineux. Elle échoue avec le message
Erreur lors du traitement de la requête: 'La source du sous-flux n'a pas été matérialisée en 5000 millisecondes'. Compléter avec 500 interne Server Erreur de réponse. Pour modifier le comportement de gestion des exceptions par défaut, fournit une exception ExceptionHandler. akka.stream.impl.SubscriptionTimeoutException: Substream Source n'a pas été matérialisé en 5000 millisecondes
Voici mes itinéraires
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(_)
}
}
}
Essayer de télécharger un fichier de dire 100KB va finir par aller chercher une version tronquée du fichier habituellement de taille environ 16-25Kb Toute aide appréciée
Edit: Pour le problème de téléchargement, j'ai pris la suggestion de Stefano et j'ai obtenu
[error] found : akka.stream.scaladsl.Source[akka.util.ByteString,akka.NotUsed]
[error] required: akka.http.scaladsl.marshalling.ToResponseMarshallable
Cela fait fonctionner
complete(HttpEntity(ContentTypes.`application/octet-stream`, client.download("bucketname", key).runWith(Sink.head)))