java 发送post请求携带文件和参数
时间: 2024-06-08 21:04:52 浏览: 187
在 Java 中发送 POST 请求并携带文件和参数,你可以使用 `java.net.HttpURLConnection` 类来实现。下面是一个示例代码:
```java
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
public class FileUploadExample {
public static void main(String[] args) throws IOException {
String url = "http://example.com/upload"; // 请求的URL
String filePath = "/path/to/file"; // 文件路径
String paramName = "file"; // 文件参数名
String paramName2 = "param1"; // 其他参数名
String paramValue2 = "value1"; // 其他参数值
File file = new File(filePath);
URL requestUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection) requestUrl.openConnection();
// 设置请求方法为POST
connection.setRequestMethod("POST");
connection.setDoOutput(true);
// 设置请求头部信息
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
try (OutputStream outputStream = connection.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream))) {
// 写入文件参数
writer.append("------WebKitFormBoundary7MA4YWxkTrZu0gW\r\n")
.append("Content-Disposition: form-data; name=\"" + paramName + "\"; filename=\"" + file.getName() + "\"\r\n")
.append("Content-Type: " + HttpURLConnection.guessContentTypeFromName(file.getName()) + "\r\n")
.append("\r\n")
.flush();
// 写入文件内容
try (InputStream inputStream = new FileInputStream(file)) {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.flush();
}
// 写入其他参数
writer.append("\r\n")
.append("------WebKitFormBoundary7MA4YWxkTrZu0gW\r\n")
.append("Content-Disposition: form-data; name=\"" + paramName2 + "\"\r\n")
.append("\r\n")
.append(paramValue2)
.append("\r\n")
.flush();
// 结束标记
writer.append("------WebKitFormBoundary7MA4YWxkTrZu0gW--\r\n").flush();
}
// 发送请求并获取响应
int responseCode = connection.getResponseCode();
System.out.println("Response Code: " + responseCode);
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
String line;
StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line);
}
System.out.println("Response: " + response.toString());
}
}
}
```
在上面的示例代码中,我们首先创建了一个 `HttpURLConnection` 对象,并设置请求方法为 POST,然后设置请求头部信息。接下来,我们使用输出流向服务器写入请求体内容,首先是文件参数,然后是文件内容,最后是其他参数。发送请求后,我们可以获取响应的状态码和响应内容。
请注意,示例中的边界字符串 `"----WebKitFormBoundary7MA4YWxkTrZu0gW"` 只是一个示例,请根据实际情况修改该字符串。
希望这可以帮助到你!
阅读全文