scala - PlayFramework - 上传文件的 FakeRequest
问题描述
我正在尝试测试控制器以上传文件。控制器接收多部分请求。
在测试中,我正在以这种方式创建 FakeRequest
val tempFile = play.api.libs.Files.SingletonTemporaryFileCreator.create("prefix", "txt")
val file = FilePart("upload", "hello.txt", Option("text/plain"), tempFile)
val controller = new LoadController(controllerComponents)
val formData = MultipartFormData(
dataParts = Map(),
files = Seq(file),
badParts = Seq())
val response = controller.upload.apply(FakeRequest(POST, "/upload").
withHeaders(HeaderNames.CONTENT_TYPE -> "multipart/form-data; boundary=------------------------968e587c4173725c").
withMultipartFormDataBody(formData))
upload
控制器在密钥中接收要上传的文件。如果我使用 curl、postman 或其他 rest 客户端测试控制器,它可以工作,但在测试中,我总是收到消息[Unexpected end of input]
,好像upload
密钥为空一样。
提前致谢
解决方案
我遇到了同样的问题,发现您需要设置的dataParts
属性MultipartFormData
:
val formData = MultipartFormData(
dataParts = Map("" -> Seq("dummydata")),
files = Seq(file),
badParts = Seq())
这样我也不必设置内容类型/边界标题。
推荐阅读
- sql - 想要在 Postgresql 中不同表的多行中分配表中的金额
- javascript - 在画布中旋转后的坐标问题
- unit-testing - 如何只配置一次 vertx 实例本身并在应用程序代码和测试中使用它?
- c# - IErrorDataInfo 验证框不可见
- java - ANDROID - 如何从单选按钮获取文本并将其插入 sqlite 数据库?
- asp.net-core - ASP .Net Core 上的 RSA 和 SignedCms;需要多平台方法
- git - 检测/防止对 git 中的文件进行不必要的更改
- c# - 在设置程序例程后,将属性绑定到 Datagrid 上的文本框不显示值
- c# - .Net Core MVC 多个计划的 Quartz 作业和单例范围
- java - EAR 编译时出现 java 11 部署错误