Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 带有Lagom的多部分表单错误_Scala_Playframework_Multipartform Data_Lagom - Fatal编程技术网

Scala 带有Lagom的多部分表单错误

Scala 带有Lagom的多部分表单错误,scala,playframework,multipartform-data,lagom,Scala,Playframework,Multipartform Data,Lagom,我们的大多数Lagom入口点不使用多部分表单请求,但有一个使用。由于Lagom目前不支持本地的多部分请求,我看到的一般建议是使用PlayServiceCall机制调用底层的PlayAPI 我们已经做到了这一点,而且它在大多数情况下都是有效的。但我们会遇到间歇性错误,尤其是在提交大型文件时。这些总是java.util.zip.ZipException(各种类型)的情况,看起来好像没有收到完整的文件进行处理 下面是入口点在代码中的外观;特别是,播放包装机制: def upload = PlaySer

我们的大多数Lagom入口点不使用多部分表单请求,但有一个使用。由于Lagom目前不支持本地的多部分请求,我看到的一般建议是使用PlayServiceCall机制调用底层的PlayAPI

我们已经做到了这一点,而且它在大多数情况下都是有效的。但我们会遇到间歇性错误,尤其是在提交大型文件时。这些总是
java.util.zip.ZipException
(各种类型)的情况,看起来好像没有收到完整的文件进行处理

下面是入口点在代码中的外观;特别是,播放包装机制:

def upload = PlayServiceCall[NotUsed, UUID] {
  wrapCall => Action.async(multipartFormData) {
    request => wrapCall(ServiceCall { _ =>
      val upload = request.body.file("upload")
      val input = new FileInputStream(upload.get.ref.file)
      val filename = upload.get.filename
      // ...
      // other code to actually process the file
      // ...
    })(request).run
  }
}
以下是我们看到的两个例外示例:

Caused by: java.util.zip.ZipException: invalid code lengths set
  at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164)
  at java.util.zip.ZipInputStream.read(ZipInputStream.java:194)
  at org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.read(ZipSecureFile.java:214)
  at java.io.FilterInputStream.read(FilterInputStream.java:107)
  etc.

Caused by: java.util.zip.ZipException: invalid distance too far back
  at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164)
  at java.util.zip.ZipInputStream.read(ZipInputStream.java:194)
  at org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.read(ZipSecureFile.java:214)
  at java.io.FilterInputStream.read(FilterInputStream.java:107)
  etc.

我们在Scala中使用Lagom 1.3.8。有什么建议吗?

尝试使用基于Akka HTTP的新服务网关

您可以通过将以下内容添加到
build.sbt
来启用此功能:

lagomServiceGatewayImpl in ThisBuild := "akka-http"
Lagom 1.3.8默认情况下仍然禁用新的服务网关,但经历过此问题的Lagom用户报告说,通过启用
akka http
网关解决了此问题。这将成为Lagom 1.4.0中的默认实现