是否有任何方便的方法来读取和解析来自传入请求的数据.
例如客户发起邮寄请求
URLConnection connection = new URL(url).openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
PrintWriter writer = null;
try {
OutputStream output = connection.getOutputStream();
writer = new PrintWriter(new OutputStreamWriter(output, charset), true); // true = autoFlush, important!
// Send normal param.
writer.println("--" + boundary);
writer.println("Content-Disposition: form-data; name=\"param\"");
writer.println("Content-Type: text/plain; charset=" + charset);
writer.println();
writer.println(param);
Run Code Online (Sandbox Code Playgroud)
我无法使用param request.getParameter("paramName").以下代码
BufferedReader reader = new BufferedReader(new InputStreamReader(
request.getInputStream()));
StringBuilder sb = new StringBuilder();
for (String line; (line = reader.readLine()) != null;) {
System.out.println(line);
}
Run Code Online (Sandbox Code Playgroud)
但是为我显示内容
-----------------------------29772313742745 …Run Code Online (Sandbox Code Playgroud) 我正在编写一个Java客户端应用程序来接收来自IP摄像头的实时M-JPEG视频.视频由摄像机作为无限多部分HTTP消息发送,其中每个部分都是单个JPEG帧.我需要在它们到达时处理每个帧,所以我希望有一种方法可以在收到每个消息部分/视频帧时发出异步触发事件的HTTP请求.
是否有人知道任何库可以做到这一点?我在Google上找到的所有示例都不会起作用,因为他们使用的阻塞调用只解析响应,并在整个响应完成后将其分解为部分(显然不适用于无休止的响应).
我意识到我可以通过搜索消息边界手动将数据拆分成部分,但感觉就像我要重新发明轮子一样.
我认为标题说明了一切:我正在寻找解析包含 multipart/form-data HTTP 请求正文部分的String的方法。即字符串的内容看起来像这样:
--xyzseparator-blah
Content-Disposition: form-data; name="param1"
hello, world
--xyzseparator-blah
Content-Disposition: form-data; name="param2"
42
--xyzseparator-blah
Content-Disposition: form-data; name="param3"
blah, blah, blah
--xyzseparator-blah--
Run Code Online (Sandbox Code Playgroud)
我希望得到的是一张parameters地图,或者类似的东西。
parameters.get("param1"); // returns "hello, world"
parameters.get("param2"); // returns "42"
parameters.get("param3"); // returns "blah, blah, blah"
parameters.keys(); // returns ["param1", "param2", "param3"]
Run Code Online (Sandbox Code Playgroud)
xyzseparator-blah在这种情况下),,但如果我必须这样做,我可以忍受它。如果有一个满足上述条件的解决方案,但其输入是 ApacheHttpRequest而不是 a String,那也是可以接受的。(基本上,我确实收到了一个HttpRequest,但我使用的内部库是这样构建的,它将此请求的主体提取为字符串,并将其传递给负责进行解析的类。但是,如果需要的话,我也可以直接在HttpRequest.)
无论我如何尝试通过 Google、SO 和其他论坛找到答案,解决方案似乎总是使用commons fileupload来浏览各个部分。例如:here、here、 …