3

Scalaを使用してPlayFrameworkに複数の大きなファイルをアップロードしようとしています。私はまだスカラで、初心者です。

ここから素晴らしいコードを取得して、90%の道のりを歩みましたが、今はまた行き詰まっています。

私が今抱えている主な問題は、アップロードされた他のデータではなく、ファイルデータしか読み取れないことです。プレイドキュメントを調べた後、ここからそれを取得する方法がわかりません。どんな提案もありがたいです!

  def directUpload(projectId: String) = Secured(parse.multipartFormData(myFilePartHandler)) { implicit request =>
    Ok("Done");
  }


def myFilePartHandler: BodyParsers.parse.Multipart.PartHandler[MultipartFormData.FilePart[Result]] = {
    parse.Multipart.handleFilePart {
      case parse.Multipart.FileInfo(partName, filename, contentType) =>
        println("Handling Streaming Upload:" + filename + "/" + partName + ", " + contentType);

        //Set up the PipedOutputStream here, give the input stream to a worker thread
        val pos: PipedOutputStream = new PipedOutputStream();
        val pis: PipedInputStream = new PipedInputStream(pos);
        val worker: UploadFileWorker = new UploadFileWorker(pis,contentType.get);
        worker.start();

        //Read content to the POS
        play.api.libs.iteratee.Iteratee.fold[Array[Byte], PipedOutputStream](pos) { (os, data) =>
          os.write(data)
          os
        }.mapDone { os =>
          os.close()
          worker.join()
          if( worker.success )
            Ok("uplaod done. Size: " + worker.size )
          else
            Status(503)("Upload Failed");
        }
    }
  }
4

1 に答える 1

0

データ部分を処理する必要があります。ご想像のとおり (またはドキュメントを参照)、データ部分を処理する関数は次のように呼び出されますhandleFilePart

def myFilePartHandler: BodyParsers.parse.Multipart.PartHandler[MultipartFormData.FilePart[Result]] = {
   parse.Multipart.handleFilePart {
     // ...
   }
   parse.Multipart.handleFilePart {
     // ...
   }
}

別の方法はhandlePart方法です。詳細については、ドキュメントを確認してください。

于 2013-03-05T16:49:13.250 に答える