郵便配達員が私のサーバーにファイルと情報を送信するためのクエリを生成しました。私のプログラムでうまく動作します。PartMapのRetrofitとWebKitFormBoundaryを使用してサーバーにファイルを送信する
MediaType mediaType = MediaType.parse("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
RequestBody body = RequestBody.create(mediaType,
"------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"filename\"; filename=\"C:\\testFile.doc\"\r\nContent-Type: application/msword\r\n\r\n\r\n" +
"------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"id\"\r\n\r\n7\r\n" +
"------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"type\"\r\n\r\n3\r\n" +
"------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"note\"\r\n\r\nafejhejfh\r\n" +
"------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"list[0][id]\"\r\n\r\n1\r\n" +
"------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"list[0][is_checked]\"\r\n\r\n0\r\n" +
"------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"list[0][filename]\"; filename=\"C:\\test.pdf\"\r\nContent-Type: application/pdf\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--");
改修方法:
初めてwebkitformboundaryに直面して、動的にPartmapを作成するために、サンプルの上に変更する必要があります。いくつかのパラメータを別のリストからサイクルに追加する必要があるためです。 私は例以下のようなものでpartmapを生成し、サーバ
クエリ地図からAPIドキュメントにコードリターン422エラー以下
--header 'Authorization: {{authorization}}' \
--header 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
を書いたように、ヘッダーに「WebKitFormBoundary7MA4YWxkTrZu0gW」を追加しようとしました。
Map<String, RequestBody> requestMap = new HashMap<>();
RequestBody file = null;
if (file != null) {
file = RequestBody.create(MediaType.parse("application/msword"), testFile);
requestMap.put("filename", file);
}
RequestBody id = RequestBody.create(MediaType.parse("text/plain"), "18");
RequestBody type = RequestBody.create(MediaType.parse("text/plain"), "3");
RequestBody notes = RequestBody.create(MediaType.parse("text/plain"), notesTextArea.getText());
RequestBody list0id = RequestBody.create(MediaType.parse("text/plain"), "1");
RequestBody list0is_checked = RequestBody.create(MediaType.parse("text/plain"), "0");
RequestBody pdfFilename = null;
if (pdfFile != null) {
pdfFilename = RequestBody.create(MediaType.parse("application/pdf"), pdfFile);
requestMap.put("list[0][filename]", pdfFilename);
}
requestMap.put("file", file);
requestMap.put("id", id);
requestMap.put("type", type);
requestMap.put("notes", notes);
requestMap.put("list[0]id", list0id);
requestMap.put("list[0]is_checked", list0is_checked);
改造方法:
@Multipart
@Headers({"Accept: application/json", "content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW"})
@POST("api/save")
Call<SaveResponse> save(@Header("Authorization") String authorization,
@PartMap Body map);
だから私は私のPartmapにWebKitFormBoundary7MA4YWxkTrZu0gWや他の必要な情報を置くことができる方法を理解するために、任意の助けを必要としています。
ご協力いただきありがとうございます。
p.s.新しい年のコーダー)