加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – PlayFramework测试:在伪造请求错误中上传文件

发布时间:2020-12-16 09:54:14 所属栏目:安全 来源:网络整理
导读:我想测试我的方法,这需要上传文件.它初始化如下: val tempFile = TemporaryFile(new java.io.File("/home/ophelia/Desktop/students"))val part = FilePart[TemporaryFile]( key = "students",filename = "students",contentType = Some("text/plain"),ref
我想测试我的方法,这需要上传文件.它初始化如下:

val tempFile = TemporaryFile(new java.io.File("/home/ophelia/Desktop/students"))
val part = FilePart[TemporaryFile](
  key = "students",filename = "students",contentType = Some("text/plain"),ref = tempFile)
val files = Seq[FilePart[TemporaryFile]](part)
val formData = MultipartFormData(
  dataParts = Map(),files = Seq(part),badParts = Seq(),missingFileParts = Seq())

我将它传递给FakeRequest:

val result = route(
  FakeRequest(POST,"/api/courses/"+"4f3c4ec9-46bf-4a05-a0b2-886c2040f2f6"+"/import" )
    .withHeaders("Authorization" -> ("Session " + testSessionA.id.string))
    .withMultipartFormDataBody(formData)
)

但是当我运行测试时,我收到以下错误:

Cannot write an instance of play.api.mvc.AnyContentAsMultipartFormData to HTTP response. Try to define a Writeable[play.api.mvc.AnyContentAsMultipartFormData]

我做错了什么以及如何解决?我在互联网上看,我没有找到任何有用的方法来理解和解决这个问题.

解决方法

重要的是要记住http请求完全是文本. route()采用隐式Writeable将提供的请求的主体类型转换为文本.没有正确的Writeable,就无法知道如何将MultipartFormData转换为请求体.

似乎没有Writeable for MultipartFormData,但你可以提供自己的. jroper有一个great Writeable你可以用来参考. (编辑:那个代码是错误的,这里是a working Writeable for AnyContentAsMultipartFormData)

获得Writeable后,您需要访问route().请记住,您目前有一个FakeRequest [AnyContentAsMultipartFormData],而不是FakeRequest [MultipartFormData].您可以先转换您的请求:

val request = FakeRequest(POST,"/api/courses/"+"4f3c4ec9-46bf-4a05-a0b2-886c2040f2f6"+"/import" )
        .withHeaders("Authorization" -> ("Session "))
        .withMultipartFormDataBody(formData)
route(request.map(_.mdf).asInstanceOf[FakeRequest[MultipartFormData[TemporaryFile]]])

或使您的可写入可写[AnyContentAsMultipartFormData].

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读