次の投稿要求を行う Windows Phone 8 クライアントがあります。
public async Task<string> DoPostRequestAsync(String URI, JSonWriter jsonObject, ObservableCollection<byte[]> attachments)
{
var client = new RestClient(DefaultUri);
var request = new RestRequest(URI, Method.POST);
request.AddParameter("application/json; charset=utf-8", jsonObject.ToString(), ParameterType.RequestBody);
// add files to upload
foreach (var a in attachments)
request.AddFile("picture", a, "file.jpg");
var content = await client.GetResponseAsync(request);
return content;
}
RestSharp のドキュメントから、ファイルをリクエストに追加することで、自動的に「マルチパート/フォームデータ」リクエストとして作成されることを読みました。
Play 2.1 でのアップロード操作のコントローラーは次のとおりです。
@BodyParser.Of(BodyParser.Json.class)
public static Result createMessage() {
JsonNode json = request().body().asJson();
ObjectNode result = Json.newObject();
String userId = json.findPath("userId").getTextValue();
String rayz = json.findPath("message").getTextValue();
Http.MultipartFormData body = request().body().asMultipartFormData();
Http.MultipartFormData.FilePart picture = body.getFile("picture");
if (picture != null) {
String fileName = picture.getFilename();
String contentType = picture.getContentType();
File file = picture.getFile();
result.put("status", "success");
result.put("message", "Created message!");
return badRequest(result);
} else {
result.put("status", "error");
result.put("message", "Message cannot be created!");
return badRequest(result);
}
}
application.conf で、サイズ制限を増やすために次のように設定したことに注意してください (機能していないようです)。
# Application settings
# ~~~~~
parsers.text.maxLength=102400K
今、POST リクエストを作成しようとするたびに、デバッガーで IsMaxSizeEsceeded 変数が常に true であり、マルチパート変数が null であることに気付きました。次のコントローラーを使用して1つのファイルnuをアップロードしようとすると、すべてが正常に機能するように見えました。サイズは問題なく、マルチパート変数が設定されました。
public static Result singleUpload() {
ObjectNode result = Json.newObject();
Http.MultipartFormData body = request().body().asMultipartFormData();
Http.MultipartFormData.FilePart picture = body.getFile("picture");
if (picture != null) {
String fileName = picture.getFilename();
String contentType = picture.getContentType();
File file = picture.getFile();
result.put("status", "success");
result.put("message", "File uploaded!");
return badRequest(result);
} else {
result.put("status", "error");
result.put("message", "File cannot be uploaded!");
return badRequest(result);
}
}
問題は、添付ファイル/ファイルをJSONオブジェクトとともに単一のPOSTリクエストでサーバーに送信/アップロードする必要があり、個別に送信する必要がないことです。
誰かが以前に同様の問題に直面したことがありますか? これを達成することは可能ですか - Play 2.1 で 1 つの POST リクエストでサーバーにアップロードする json オブジェクトと複数のファイルを送信しますか?