Lagomエントリポイントのほとんどは、マルチパートフォームリクエストを使用しませんが、1つは行います。 Lagomは現在マルチパートリクエストをネイティブにサポートしていないので、私が見てきた一般的な提案は、PlayServiceCallメカニズムを使って、基礎となるPlay APIを呼び出すことです。Lagomを使用したマルチパートフォームエラー
私たちはこれを行い、それはほとんどの場合動作します。しかし、特に大容量のファイルを提出する際に断続的なエラーが発生します。これらのファイルは、常に、ファイル全体が処理のために受信されていないかのように見える、さまざまな種類のjava.util.zip.ZipException
のケースです。
コード内でのエントリポイントの表示は次のとおりです。具体的には、プレイラッピングメカニズム:
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を使用します。ここでは
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
}
}
は、私たちが見ている例外のちょうど2つの例があります。何か提案してください。