HttpURLConnection构造请求体传文件

HttpURLConnection构造请求体传文件

在Java中,使用HttpURLConnection构造请求体传输文件,你需要做以下几步:

1、创建URL对象指向你想要请求的资源。

2、通过URL打开连接,转换为HttpURLConnection实例。

3、设置请求方法为POST。

4、设置请求头,包括Content-Type(通常为multipart/form-data)和边界值。

5、创建DataOutputStream来写入请求体。

6、构造每个表单项的数据,包括文件内容和文本字段。

7、读取服务器响应。

8、关闭连接。

以下是一个简化的示例代码:

复制代码
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class HttpUploadFileExample {
    public static void main(String[] args) throws IOException {
        String boundary = "*****";
        String endBoundary = "--" + boundary + "--";
        URL url = new URL("http://example.com");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
 
        try (
            OutputStream output = connection.getOutputStream();
            PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"), true);
        ) {
            // 添加文件
            File file = new File("/path/to/file");
            writer.append("--" + boundary).append(CRLF);
            writer.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"").append(CRLF);
            writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(file.getName())).append(CRLF);
            writer.append(CRLF).flush();
            Files.copy(file.toPath(), output);
            output.flush(); // 确保文件内容被发送
            writer.append(CRLF).flush(); // 写入换行,表示文件结束
 
            // 添加表单字段
            writer.append("--" + boundary).append(CRLF);
            writer.append("Content-Disposition: form-data; name=\"fieldName\"").append(CRLF);
            writer.append(CRLF).append("value").append(CRLF).flush();
 
            // 结束边界
            writer.append(endBoundary).append(CRLF).flush();
        }
 
        int responseCode = connection.getResponseCode();
        System.out.println("Response Code: " + responseCode);
        
        // 处理服务器响应
        ...
        
        connection.disconnect();
    }
}

CRLF是Carriage-Return Line-Feed的缩写,意思是回车换行,就是回车。



相关推荐
用户3802258598242 分钟前
vue3中使用mitt全局事件总线
javascript
Warren9817 分钟前
Java Record 类 — 简化不可变对象的写法
java·开发语言·jvm·分布式·算法·mybatis·dubbo
SimonKing22 分钟前
流式数据服务端怎么传给前端,前端怎么接收?
java·后端·程序员
Laplaces Demon24 分钟前
Spring 源码学习(十)—— DispatcherServlet
java·后端·学习·spring
哈基米喜欢哈哈哈32 分钟前
进程和线程
java·linux·windows·笔记
咕白m62534 分钟前
Java 高效实现 Word 转 PDF - 掌握关键转换选项
java
用户38022585982436 分钟前
vue3封装命令式全局消息提示组件
前端·javascript·vue.js
uhakadotcom1 小时前
在nodejs之中, userUuid !== '' 和 userUuid != ''是一样的吗?
前端·javascript·面试
我想说一句1 小时前
JavaScript之深浅拷贝
前端·javascript·面试
李明卫杭州1 小时前
详解DOM元素宽度相关属性
前端·javascript