httpurlconnection 上传文件 请求头 表单提交
时间: 2023-07-26 14:31:13 浏览: 94
当使用 HttpURLConnection 上传文件时,需要设置请求方法为 POST,并且在请求头中添加 Content-Type 和 Content-Disposition 字段,指定上传文件的类型和文件名。同时,需要在请求体中添加表单数据和文件内容。以下是一个示例代码:
```
URL url = new URL("http://example.com/upload");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
String boundary = "*****"; // 自定义边界字符串
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
OutputStream outputStream = conn.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream, "UTF-8"), true);
// 添加表单数据
writer.append("--" + boundary).append("\r\n");
writer.append("Content-Disposition: form-data; name=\"username\"").append("\r\n");
writer.append("\r\n");
writer.append("john").append("\r\n");
writer.flush();
// 添加文件内容
writer.append("--" + boundary).append("\r\n");
writer.append("Content-Disposition: form-data; name=\"file\"; filename=\"example.txt\"").append("\r\n");
writer.append("Content-Type: text/plain; charset=UTF-8").append("\r\n");
writer.append("\r\n");
writer.flush();
Files.copy(Paths.get("example.txt"), outputStream);
outputStream.flush();
// 结束请求
writer.append("\r\n").append("--" + boundary + "--").append("\r\n");
writer.close();
// 发送请求并读取响应
int statusCode = conn.getResponseCode();
if (statusCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = conn.getInputStream();
// 处理响应数据
}
```
其中,boundary 字符串需要自定义,用于分隔不同的表单项。在添加表单数据和文件内容时,需要按照指定格式添加,并且在添加文件内容时需要使用 `Files.copy` 方法将文件内容写入到输出流中。最后,要记得关闭输出流和输入流,并根据响应状态码来处理响应数据。
阅读全文