画像が変換されるbase64文字など、渡すパラメータが非常に大きい場合があります。通常のパラメータ送信でエラーが確実に報告される場合は、このパラメータをfrom-data本文に入れることができます。JAVAの背景は次のようにする必要があります。 from-dataパラメーターを受け取ります。
public ReturnModel fromDateTest(HttpServletRequest request){
ReturnModel returnModel = new ReturnModel();
JSONObject jsonObject = new JSONObject();
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = null;
try {
items = upload.parseRequest(new ServletRequestContext(request));
} catch (FileUploadException e) {
returnModel.setCode(1);
returnModel.setMessage("上传失败");
e.printStackTrace();
}
for(int i=0;i<items.size();i++)
{
String fileName = items.get(i).getFieldName();
String fileValue = items.get(i).getString();
jsonObject.put(fileName, fileValue);
}
returnModel.setCode(0);
returnModel.setMessage("上传成功");
returnModel.setBody("");
return returnModel;
}
通常、これは許容範囲です。
でも実際の状況はこんな感じです。
明らかに、リクエストには価値がありますが、なぜそれを取得できないのですか?
後で、いくつかの情報を確認したところ、Apache Commons FileUploadコンポーネントを使用してファイルをアップロードすると、常にnullが返されることがわかりました。デバッグにより、ServletFileUploadオブジェクトが空であることがわかりました。SpringBootにはデフォルトのファイルアップロードコンポーネントがあります。オフにする必要があります。 ServletFileUploadを使用する場合のSpringBootのデフォルト構成。MultipartResolverSpringによって提供されるデフォルト値を無効にして、構成ファイルに追加します。
spring.http.multipart.enabled=false
それからそれを試してみてください、そして
あなたはそれを手に入れることができます。
以下は、データからのリクエストを送信するためのコードです。
@SuppressWarnings("rawtypes")
public static String formUpload(String urlStr, Map<String, String> textMap) {
String res = "";
HttpURLConnection conn = null;
textMap.put("keyId","111");
textMap.put("photo","222");
// boundary就是request头和上传文件内容的分隔符
String BOUNDARY = "---------------------------123821742118716";
try {
URL url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setReadTimeout(30000);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
// conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
conn.setRequestProperty("Content-Type","multipart/form-data; boundary=" + BOUNDARY);
OutputStream out = new DataOutputStream(conn.getOutputStream());
// text
if (textMap != null) {
StringBuffer strBuf = new StringBuffer();
Iterator iter = textMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String inputName = (String) entry.getKey();
String inputValue = (String) entry.getValue();
if (inputValue == null) {
continue;
}
strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n");
strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"\r\n\r\n");
strBuf.append(inputValue);
}
out.write(strBuf.toString().getBytes());
}
byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
out.write(endData);
out.flush();
out.close();
// 读取返回数据
StringBuffer strBuf = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
strBuf.append(line).append("\n");
}
res = strBuf.toString();
reader.close();
reader = null;
} catch (Exception e) {
System.out.println("发送POST请求出错。" + urlStr);
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
conn = null;
}
}
return res;
}