首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用gridFSBodyParser(gridFS)以非阻塞方式上传文件

不使用gridFSBodyParser(gridFS)以非阻塞方式上传文件
EN

Stack Overflow用户
提问于 2014-05-02 13:29:06
回答 1查看 311关注 0票数 2

插件play-reactivemongo提供了一种上传文件的简单方法:

代码语言:javascript
复制
def upload = Action(gridFSBodyParser(gridFS)) { request =>
  val futureFile: Future[ReadFile[BSONValue]] = request.body.files.head.ref
  futureFile.map { file =>
    // do something
    Ok
  }.recover { case e: Throwable => InternalServerError(e.getMessage)  }
}

不幸的是,这个解决方案不适合我,因为:

  • 我只希望我的刀层依赖于反应-芒果。
  • 只有当用户通过身份验证(使用SecureSocial)并使用某些用户的属性作为检查和元数据时,我才需要保存该文件。
  • 如果没有对用户进行身份验证,则根本不应该解析请求主体(也请参阅this question)。

这将是一些类似的东西

代码语言:javascript
复制
def upload = SecuredAction { request =>
  val user = request.user
  val enumerator = an enumrator from the body parsing ???
  myDAO.saveFile(user, enumerator)

object myDAO {
  def saveFile(user:User, enumerator:Enumerator[Array[Byte]]) = {
    ...
    val fileToSave = DefaultFileToSave(...)
    gridfs.save(enumerator, fileToSave)
    ...
  } 
}

不幸的是,似乎无法从解析请求体中获得枚举数。唯一的方法似乎是为Action提供一个解析器和一个Iteratee,该解析器和Iteratee将与被解析的主体一起喂食。

我不知道如何以一种反应的方式实现它(不使用临时文件或将主体存储在内存中)。有可能吗?

EN

回答 1

Stack Overflow用户

发布于 2014-05-15 08:44:58

实际上,您可能会考虑根本不使用girdFS内置解析器:

代码语言:javascript
复制
val gfs = new GridFS(db)

// the controller method, Authenticated here is custom object extending ActionBuilder 
def upload = Authenticated.async(parse.multipartFormData) { request =>
  ...
  request.body.file("photo") match {
    // handle error cases
    ...
    case Some(photo) =>
      val fileToSave = DefaultFileToSave(photo.filename, photo.contentType)
      // here some more operations, basically you don't need the and need only photo.ref.file
      val enumerator = Enumerator(Image(photo.ref.file).fitToWidth(120).write)
      gfs.save(enumerator, fileToSave) map {
        //handle responses and stuff
        ...
      }
    }
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23429359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档