java - 从输入流中解析 multipart/form-data 的库和示例

标签 java http parsing multipartform-data multipartentity

我发送的一种 HTTP 请求的响应是 multipart/form-data 看起来像这样:

--------boundary123
Content-Disposition: form-data; name="json"
Content-Type: application/json

{"some":"json"}
--------boundary123
Content-Disposition: form-data; name="bin"
Content-Type: application/octet-stream

<file data>

--------boundary123

我一直在使用 apache 来发送和接收 HTTP 请求,但我似乎找不到一种简单的方法来使用它来解析上述内容以便于访问表单字段。

我不想重新发明轮子,所以我正在寻找一个允许我做类似事情的库:

MultipartEntity multipart = new MultipartEntity(inputStream);
InputStream bin = multipart.get("bin");

有什么建议吗?

最佳答案

使用弃用构造函数的示例代码:

import java.io.ByteArrayInputStream;

import org.apache.commons.fileupload.MultipartStream;

public class MultipartTest {

    // Lines should end with CRLF
    public static final String MULTIPART_BODY =
            "Content-Type: multipart/form-data; boundary=--AaB03x\r\n"
            + "\r\n"
            + "----AaB03x\r\n"
            + "Content-Disposition: form-data; name=\"submit-name\"\r\n"
            + "\r\n"
            + "Larry\r\n"
            + "----AaB03x\r\n"
            + "Content-Disposition: form-data; name=\"files\"; filename=\"file1.txt\"\r\n"
            + "Content-Type: text/plain\r\n"
            + "\r\n"
            + "HELLO WORLD!\r\n"
            + "----AaB03x--\r\n";

    public static void main(String[] args) throws Exception {

        byte[] boundary = "--AaB03x".getBytes();

        ByteArrayInputStream content = new ByteArrayInputStream(MULTIPART_BODY.getBytes());

        @SuppressWarnings("deprecation")
        MultipartStream multipartStream =
                new MultipartStream(content, boundary);

        boolean nextPart = multipartStream.skipPreamble();
        while (nextPart) {
            String header = multipartStream.readHeaders();
            System.out.println("");
            System.out.println("Headers:");
            System.out.println(header);
            System.out.println("Body:");
            multipartStream.readBodyData(System.out);
            System.out.println("");
            nextPart = multipartStream.readBoundary();
        }
    }
}

关于java - 从输入流中解析 multipart/form-data 的库和示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13457503/

相关文章:

java - 使用 java 对象创建一个简单的数学游戏

json - Angular HTTP Res JSON数据在html中打印

jquery - 请求的 JSON 解析失败

c# - 正在上传 Vimeo。无法获得 complete_uri 字段作为响应

java - 解析纯文本文件中的数据结构

xml - 解析大型 PLIST 和内存占用

java - Android 应用程序的后端

java - 从 Controller 转发jsp

java - 两个锁有可能发生死锁吗?

php - Axis 网络摄像头 http 上传到 php