首页 > 解决方案 > 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密钥为空一样。

提前致谢

标签: scalaplayframework

解决方案


我遇到了同样的问题,发现您需要设置的dataParts属性MultipartFormData

val formData = MultipartFormData(
  dataParts = Map("" -> Seq("dummydata")), 
  files =  Seq(file),
  badParts = Seq())

这样我也不必设置内容类型/边界标题。


推荐阅读