在 Play2 / Scala 中从内存中的 MultipartFormData 提取文件

2024-02-12

我目前正在 Play2/Scala 中使用以下内容,使用 FileUploader Javascript 实用程序将文件上传到我的服务器:

def fileUploader = Action(parse.multipartFormData) { request =>
  request.body.file("qqfile").map { picture =>
    import java.io.File
    val filename = picture.filename 
    val contentType = picture.contentType
    picture.ref.moveTo(new File("/tmp",filename))
    Ok(Json.toJson(Map( "success" -> "true" )))
  }.getOrElse {
    Ok(Json.toJson(Map( "error" -> "error occured")))
  }
}

我只处理小文件(

这里的 play 文档建议编写一个自定义的 BodyParser (http://www.playframework.com/documentation/2.1.0/ScalaFileUpload http://www.playframework.com/documentation/2.1.0/ScalaFileUpload)但似乎没有任何关于如何编写文档的文档。目前尚不清楚 Scaladocs 中的 API/实现是如何工作的。我尝试查找 MultiPartFormData 源代码以了解它是如何工作的,但我似乎无法在他们的 Git 存储库中找到它:

https://github.com/playframework/Play20/tree/master/framework/src/play/src/main/scala/play/api/mvc https://github.com/playframework/Play20/tree/master/framework/src/play/src/main/scala/play/api/mvc

我搜索了很多,但似乎找不到一个好的例子。


Untested The Multipart的对象BodyParsers为我们做了很多工作。我们需要做的第一件事是为FilePart。我假设您想要文件部分Array[Byte].

def handleFilePartAsByteArray: PartHandler[FilePart[Array[Byte]]] =
  handleFilePart {
    case FileInfo(partName, filename, contentType) =>
      // simply write the data to the a ByteArrayOutputStream
      Iteratee.fold[Array[Byte], ByteArrayOutputStream](
        new ByteArrayOutputStream()) { (os, data) =>
          os.write(data)
          os
        }.mapDone { os =>
          os.close()
          os.toByteArray
        }
  }

下一步是定义您的正文解析器:

def multipartFormDataAsBytes:BodyParser[MultipartFormData[Array[Byte]]] = 
  multipartFormData(handleFilePartAsByteArray)

然后,为了使用它,请在您指定它Action:

def fileUploader = Action(multipartFormDataAsBytes) { request =>
  request.body.files foreach {
    case FilePart(key, filename, contentType, bytes) => // do something
  }
  Ok("done")
}

上面代码中的一些类型和方法有点难找。以下是完整的进口清单,以备您需要时使用:

import play.api.mvc.BodyParsers.parse.Multipart.PartHandler
import play.api.mvc.BodyParsers.parse.Multipart.handleFilePart
import play.api.mvc.BodyParsers.parse.Multipart.FileInfo
import play.api.mvc.BodyParsers.parse.multipartFormData
import play.api.mvc.MultipartFormData.FilePart
import play.api.libs.iteratee.Iteratee
import java.io.ByteArrayOutputStream
import play.api.mvc.BodyParser
import play.api.mvc.MultipartFormData
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Play2 / Scala 中从内存中的 MultipartFormData 提取文件 的相关文章

随机推荐

  • 绘图上可缩放、可拖动的框可以选择数据

    这是设置 我有一个数据图形图 我试图找出是否可以尝试在图形上放置一个可以移动和更改宽度的框 并返回一些值 例如曲线下的百分比和面积 它看起来像这样 关于从哪里开始有什么建议吗 我的感觉是 使用更多 GUI 界面而不是标准绘图可能是可行的 我
  • 在自定义类上创建字典样式的集合初始值设定项[重复]

    这个问题在这里已经有答案了 可能的重复 自定义集合初始化器 https stackoverflow com questions 2495791 custom collection initializers 我有一个简单的 Pair 类 pu
  • 如何增加 Tensorflow 中的变量?

    当尝试在 Tensorflow 中使用主管时 我意识到 您的训练操作负责增加全局步值 参考 https github com tensorflow tensorflow blob master tensorflow g3doc how to
  • 如何在 MVC 4 中将 List 传递给控制器

    我有 2 个模型 问题和答案 如下所示 我想将列表模型发送到视图 并且在提交表单时 我将列表模型提交到控制器 但在 Action UpdateQuestion 中只能获取问题列表 但只能获取问题列表答案是否定的 您能解释一下并告诉我如何在提
  • 在Python中迭代图像所有像素的最快方法

    我已经将图像读取为数组 import numpy as np from scipy import misc face1 misc imread face1 jpg 面 1 的尺寸为 288 352 3 我需要迭代每个像素并填充y在训练集中我
  • 如何在运算符处分割字符串

    我正在用 Java 创建一个计算器 如果我让用户输入一个字符串 例如 7 4 18 3 2 到目前为止 我必须让用户在每个数字或运算符之间输入一个空格 我如何从给定的字符串创建一个数组 其中字符串按数字或运算符拆分 因此在这种情况下数组将是
  • 错误:警告:从空值创建默认对象

    我第一次发帖 我希望有人能帮助我解决周三出现在我的网站上的这个错误 我不知道如何纠正它 因为我从未接触过 php 文件 如果我能得到一些帮助 我将非常感激 出现错误的网站位于页面顶部 http www inkedkoidesigns ca
  • 如何安装 QtWebKit 插件

    我正在运行 Qt 4 5 商业快照 并希望在我的应用程序中使用我下载的插件 它是一个 so 文件 QWebView 我需要放置此文件的特定位置吗 我可以使用QWebPluginFactory 我假设这里的插件是 NPAPI 插件 例如 Fl
  • 无法创建 SSL/TLS 安全通道 - 问题可能出在代理服务器上吗?

    我有一个 C 应用程序 它调用使用证书进行身份验证的 Web 服务方法 该代码有效 因为当它安装在服务器 A 没有代理 上时 它会进行身份验证 当我在客户端站点的服务器 B 上安装代码时 它安装在代理后面 我确实尝试了几乎所有方法 但我不断
  • 为什么 List 不实现 IOrderedEnumerable

    我想使用有序枚举 并使用接口作为返回类型而不是具体类型 我需要返回一组有序的对象 但是 当使用IList
  • 如果键不存在,C# Dictionary 查找会发生什么情况?

    我尝试检查 null 但编译器警告这种情况永远不会发生 我应该寻找什么 假设您想获取键的值does存在 使用Dictionary
  • 如何使用 beautifulsoup 检查字符串是否存在

    您好 我正在尝试编写一个程序来抓取 URL 如果抓取数据包含特定字符串 请执行某些操作 我如何使用 beautiful soup 来实现此目的 import requests from bs4 import BeautifulSoup da
  • $(...).function 不是函数 jQuery

    我知道这个问题已经在之前的帖子中发布过 但没有任何帮助 这让我发疯 更重要的是我确信答案非常简单 但我对 javascript 真的很陌生 我正在尝试从那里集成这个 raptor konami code http zurb com play
  • WooCommerce 以编程方式创建订单并重定向到付款

    对于 WooCommerce 我正在寻找一种以编程方式创建订单的解决方案 我的网站只有 1 个带有一些字段的主页 来订购 使用复选框添加产品后 我想创建订单并重定向到付款方式 有了这个答案 创建订单就差不多完成了 但是我如何开始付款呢 Wo
  • 不变量和验证规则有什么区别?

    我经常看到这个词不变量在DDD中 Here https msdn microsoft com en us magazine hh205755 aspx迪诺 埃斯波西托谈到了这一点 如果我查看 NET 库 我会看到验证属性 https msd
  • R 跨多个页面的网页抓取

    我正在开发一个网络抓取程序来搜索特定的葡萄酒并返回该品种的当地葡萄酒列表 我遇到的问题是多页结果 下面的代码是我正在使用的基本示例 url2 lt http www winemag com s washington merlot searc
  • 将 JTextArea 更改为 JScrollPane 导致其不可见

    我在 JScrollPanes 和 JTextArea 对象以及如何让它们一起工作方面遇到问题 如果我只是将 JTextArea 添加到我的 JPanel 中 它就可以正常工作并显示在我指定的位置 但是 如果我将 contentPane a
  • 将 Pandas 对象与常规 Python 对象一起存储在 HDF5 中

    熊猫有一个不错的界面 http pandas pydata org pandas docs dev io html有助于将 Dataframes 和 Series 等内容存储在 HDF5 中 random matrix np random
  • LabelEncoder:类型错误:“float”和“str”实例之间不支持“>”

    即使处理缺失值 我也面临多个变量的错误 例如 le preprocessing LabelEncoder categorical list df select dtypes include object columns values for
  • 在 Play2 / Scala 中从内存中的 MultipartFormData 提取文件

    我目前正在 Play2 Scala 中使用以下内容 使用 FileUploader Javascript 实用程序将文件上传到我的服务器 def fileUploader Action parse multipartFormData req