java - HttpsURLConnection POST 方法失败。我不知道我是否有正确的编写器和/或输出流编写器。对于多部分/表单数据
问题描述
我正在使用 multipart/form-data 发送 POST 请求。我使用了一个将数据存储为 csv 的文件。该文件是 person,positon,id。我担心错误可能是没有正确的写入器,例如 Dataoutput 流与输出流。我设置回车和换行的方式或我的任何连接设置都已关闭。URL 是正确的,但最后一个参数要求提供文件名,我将其放在 content-dispostion 中。我所做的所有更改都无法摆脱这个错误。我只是想知道这是否有任何不正确之处。我收到一个 500 错误,但这会导致收到此错误:
org.springframework.web.multipart.MultipartException:无法解析多部分 servlet 请求;嵌套异常是 java.io.IOException:org.apache.tomcat.util.http.fileupload.impl.IOFileUploadException:处理 multipart/form-data 请求失败。直播意外结束
任何建议或更改将不胜感激。
公共静态字符串 postFile(String url) 抛出 IOException {
String boundary = "xxxxxxxxxxxxxxxxxxxxxxxxx";
String charset = "UTF-8";
String CRLF = "\r\n";
int boundaryLength = 181;
try {
BufferedReader in = null;
File userss = new File("bytesExampleCSV.csv");
URL obj = new URL(url);
HttpsURLConnection conn = (HttpsURLConnection) obj.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Mobile Safari/537.36");
conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("Content-Length", String.valueOf((userss.length()) + boundaryLength));
conn.connect();
OutputStream output = conn.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, charset), true);
try {
writer.append("--").append(boundary).append(CRLF);
writer.append("Content-Disposition: form-data; name=\"bytesExampleCSV.csv\"; filename=\""
+ userss.getName() + "\"").append(CRLF);
writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF);
writer.append(CRLF).flush();
Files.copy(userss, output);
output.flush();
// writer.append(CRLF);
writer.append("--" + boundary + "--").append(CRLF).flush();
writer.close();
conn.disconnect();
System.out.println(output);
} catch (Exception e) {
e.printStackTrace();
}
解决方案
推荐阅读
- c - 在 MikroC 中创建 250ms 延迟
- reactjs - 使用 Codemirror 突出显示语法不起作用
- python - 有没有办法将字符串转换为列表?
- node.js - 测试 api 获取时间线帖子错误。尽管所有其他路由测试都成功连接到数据库
- html - 状态更改后的 Bootstrap Dropdown 更新位置
- javascript - 如何在 ReactJS 中设置 Material UI 表的样式,以使表头和表体均匀分布?
- mysql - MySQL - 导出姓氏列表
- html - CSS:从 ID 中选择孙子锚
- flextable - Flextable 似乎与 multicol LaTex 包不兼容
- http-live-streaming - Winamp - HLS 收音机 (m3u8)