2017-10-04 1 views
0

からバイナリファイルの取得:は(ここでは、ApacheのHTTPClientの、Kotlinのソースコード)POSTリクエストを送信するPOSTリクエスト

val httpPost = HttpPost("http://localhost:8000") 
val builder = MultipartEntityBuilder.create() 
builder.addBinaryBody("file", File("testFile.zip"), 
     ContentType.APPLICATION_OCTET_STREAM, "file.ext") 
val multipart = builder.build() 
httpPost.entity = multipart 
val r = httpClient.execute(httpPost) 
r.close() 

を私は火花Javaのリクエスト・オブジェクトなどを介して私のポストハンドラーで要求を受け取ります。投稿リクエストから元のファイル(およびボーナスとしてのファイル名)を取得するにはどうすればよいですか?本体が元のファイルよりも大きいため、request.bodyAsBytes()メソッドはいくつかのバイトを追加しているようです。

おかげで、スパークのドキュメントのページの一番下の近くヨルグ

答えて

0

セクション"Examples and FAQ"があります。最初の例は「何かをアップロードするには?」です。 そこからさらにexample on GitHubにリンクしています。要するに

post("/yourUploadPath", (request, response) -> { 
    request.attribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement("/temp")); 
    try (InputStream is = request.raw().getPart("file").getInputStream()) { 
     // Use the input stream to create a file 
    } 
    return "File uploaded"; 
}); 

元のファイル名にアクセスするには:複数のファイルや部品を扱うために

request.raw().getPart("file").getSubmittedFileName() 

を、私は通常、(次のようなコードを持っているファイルだけが中に含まれていると仮定すると複数部分でエンコードされたアップロード):

for (Part part : req.raw().getParts()) { 
    try (InputStream stream = part.getInputStream()) { 
    String filename = part.getSubmittedFileName(); 
    // save the input stream to the filesystem, and the filename to a database 
    } 
} 
+0

返信ありがとうございますが、悲しいことに、 q.raw()。getParts()またはreq.raw()。getPart( "file")は、単にポストハンドラの実行を終了します。 私は呼び出しをトレースし、どこかでspark-javaの深いところで、POSTリクエストは処理済みとしてマークされます。ハンドラはまだアクティブですが、getParts()またはgetPart()を超えて実行されることはありません。 私はKotlinに新しいので、spark-java Kotlinポートの問題であるかどうかはわかりません。 – osx

+0

実行が突然停止した場合は、例外が原因である可能性が最も高いです。 \t \t 'Spark.exception(Exception.class、(e、request、response) - > {e.printStackTrace();});例外を見るための追加ルートとして使用してください(申し訳ありません、知りません)。 – cello

+0

返信いただきありがとうございます。 JetBrains IDEは、コードを 'Spark.exception(Exception :: class.java、{e、request、response-> e.printStackTrace()})'に変換し、エラー(マルチパートメッセージなし)を見つけることができました。 'getParts()'が空のリストを返し、 'getPart(" file ")'の例外を返すので、コードは(編集された)コードのところで 'java.lang.NullPointerException'を返します。 POST要求のコンテンツタイプは 'multipart/form-dataです。境界= Z2Dl0386ZA0OMWccx1VRo6h7emmRriXNz'。 – osx

関連する問題