Sto costruendo un'applicazione Play Framework in Scala in cui vorrei eseguire lo streaming di una matrice di byte su S3. Sto usando la libreria Play-S3 per fare questo. Il "upload di file Multipart" della sezione documentazione è ciò che è rilevante qui:Utilizzo di Iteratees e Enumerators in Play Scala per lo streaming dei dati su S3
// Retrieve an upload ticket
val result:Future[BucketFileUploadTicket] =
bucket initiateMultipartUpload BucketFile(fileName, mimeType)
// Upload the parts and save the tickets
val result:Future[BucketFilePartUploadTicket] =
bucket uploadPart (uploadTicket, BucketFilePart(partNumber, content))
// Complete the upload using both the upload ticket and the part upload tickets
val result:Future[Unit] =
bucket completeMultipartUpload (uploadTicket, partUploadTickets)
che sto cercando di fare la stessa cosa nella mia richiesta, ma con Iteratee
s e Enumerator
s.
I corsi d'acqua e asincronia rendere le cose un po 'complicato, ma qui è quello che ho finora (Nota uploadTicket
è definito in precedenza nel codice):
val partNumberStream = Stream.iterate(1)(_ + 1).iterator
val partUploadTicketsIteratee = Iteratee.fold[Array[Byte], Future[Vector[BucketFilePartUploadTicket]]](Future.successful(Vector.empty[BucketFilePartUploadTicket])) { (partUploadTickets, bytes) =>
bucket.uploadPart(uploadTicket, BucketFilePart(partNumberStream.next(), bytes)).flatMap(partUploadTicket => partUploadTickets.map(_ :+ partUploadTicket))
}
(body |>>> partUploadTicketsIteratee).andThen {
case result =>
result.map(_.map(partUploadTickets => bucket.completeMultipartUpload(uploadTicket, partUploadTickets))) match {
case Success(x) => x.map(d => println("Success"))
case Failure(t) => throw t
}
}
Tutto compilato ed eseguito senza incidenti. Infatti, viene stampato "Success"
, ma nessun file appare mai su S3.
Ci sono sempre più problemi con il mio codice. Cos'altro è nuovo? Ma è certamente vero che i blocchi non sono 5 MB in tutti i casi, quindi questo è un problema. Comunque, proverò le tue idee e vedrò cosa posso fare. – Vidya