def save(gfs: GridFS[JSONSerializationPack.type], info: FlowInfo, enumerator: Enumerator[Array[Byte]], f: File) = {
gfs.save(enumerator, JSONFileToSave( filename = info.resumableFilename, contentType = Some(URLConnection.guessContentTypeFromName(info.resumableFilename)), uploadDate = Some(DateTime.now().getMillis), metadata = Json.obj("md5" -> org.apache.commons.codec.digest.DigestUtils.md5Hex(new FileInputStream(f)))), info.resumableChunkSize)
}
implicit val reader = reactivemongo.api.gridfs.Implicits.DefaultReadFileReader
type JSONReadFile = ReadFile[JSONSerializationPack.type, JsValue]
val collection = db[JSONCollection]("Album.files")
type G = GridFS[JSONSerializationPack.type]
var gridFS = reactiveMongoApi.gridFS
TestService.save(gridFS, info, Enumerator.fromFile(f), f)Any help would be much appreciated.
metadata = BSONDocument("md5" -> org.apache.commons.codec.digest.DigestUtils.md5Hex(new FileInputStream(f)))),
info.resumableChunkSize).map {
file => Some(file)
}
package controllers
import java.io._
import java.net.URLConnection
import javax.inject.Inject
import org.slf4j.{LoggerFactory, Logger}
import play.api.libs.Files.TemporaryFile
import play.api.libs.iteratee.{Iteratee, Enumerator}
import play.api.libs.json.{Json, JsObject, JsValue, JsString}
import play.modules.reactivemongo.json._
import play.modules.reactivemongo.json.collection.JSONCollection
import play.modules.reactivemongo.{JSONFileToSave, ReactiveMongoComponents, MongoController, ReactiveMongoApi}
import reactivemongo.api.BSONSerializationPack
import reactivemongo.api.gridfs.{FileToSave, DefaultFileToSave, GridFS, ReadFile}
import reactivemongo.bson.{BSONObjectID, BSONDocument}
import services.com.patel.album.{TestService, AlbumService}
import scala.concurrent.ExecutionContext.Implicits.global
import play.api.mvc.{MaxSizeExceeded, _}
import utils.{FlowHelper, FlowInfoStorage, FlowInfo}
import scala.concurrent.ExecutionContext.Implicits.global
import play.api.libs.concurrent.Execution.Implicits.defaultContext
import reactivemongo.api.commands.bson.BSONFindAndModifyImplicits._
import reactivemongo.api.gridfs.Implicits._
import ImplicitBSONHandlers._
class Upload @Inject()(val reactiveMongoApi: ReactiveMongoApi)
extends Controller with FlowHelper
with MongoController
with ReactiveMongoComponents {
private final val logger: Logger = LoggerFactory.getLogger(classOf[Upload])
type JSONReadFile = ReadFile[JSONSerializationPack.type, JsString]
val collection = db[JSONCollection]("Album.files")
val gridFS = reactiveMongoApi.gridFS
gridFS.ensureIndex().onComplete {
case index =>
logger.info(s"Checked index, result is $index")
}
def dealWithFile()(implicit request: RequestHeader): Result = {
val f: File = new File(base_dir + info.resumableFilename)
val md5Str = org.apache.commons.codec.digest.DigestUtils.md5Hex(new FileInputStream(f))
lazy val contentType = URLConnection.guessContentTypeFromName(f.getName())
lazy val metaData = BSONDocument("md5" -> md5Str, "tags" -> "", "albumName" -> "")
// val fileToSave = DefaultFileToSave(Some(info.resumableFilename), Some(contentType), metadata = metaData)
// val fileToSave = FileToSave[JSONSerializationPack.type](Some(info.resumableFilename), Some(contentType), metadata = metaData)
val fileToSave = new JSONFileToSave(Some(info.resumableFilename), Some(contentType), metadata = Json.obj("md5" -> org.apache.commons.codec.digest.DigestUtils.md5Hex(new FileInputStream(f))))
val enumerator = Enumerator.fromFile(f)
gridFS.save(enumerator, fileToSave)
}
}
class FileToSaveImpl(newFileName: String, newContentType: String, meta: JsObject)
extends FileToSave[gridFS.pack.type,
gridFS.pack.Value] {
val filename: String = newFileName
val contentType: Option[String] = Some(newContentType)
val uploadDate: Option[Long] = None
val metadata: gridFS.pack.Document = meta
val id: gridFS.pack.Value = JsString(BSONObjectID.generate.stringify)
val pack = gridFS.pack
}
val fileToSave = new FileToSaveImpl(file.getName(), contentType, meta.as[JsObject])
val gridFS = new GridFS[BSONSerializationPack.type](db)