如何使用JSP/Servlet将文件上传到服务器?我试过这个:
<form action="upload" method="post">
<input type="text" name="description" />
<input type="file" name="file" />
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
但是,我只获取文件名,而不是文件内容.当我添加 enctype="multipart/form-data"到<form>,然后request.getParameter()返回null.
在研究期间,我偶然发现了Apache Common FileUpload.我试过这个:
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request); // This line is where it died.
Run Code Online (Sandbox Code Playgroud)
不幸的是,servlet抛出了一个没有明确消息和原因的异常.这是堆栈跟踪:
SEVERE: Servlet.service() for servlet UploadServlet threw exception
javax.servlet.ServletException: Servlet execution threw an exception
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:313)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at …Run Code Online (Sandbox Code Playgroud) 是否有任何方便的方法来读取和解析来自传入请求的数据.
例如客户发起邮寄请求
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) 如何将servlet API添加到项目的pom.xml中
mvnrepository.com有很多servlet api和类似命名的项目,我不知道哪个是正确的.或者他们都好吗?
我发送的一种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
Run Code Online (Sandbox Code Playgroud)
我一直在使用apache发送和接收HTTP请求,但我似乎无法找到一种简单的方法来使用它来解析上面的内容以便于访问表单字段.
我宁愿不重新发明轮子,所以我正在寻找一个允许我做类似的工作的库:
MultipartEntity multipart = new MultipartEntity(inputStream);
InputStream bin = multipart.get("bin");
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我有一个java控制器,它必须向我发送一些文本数据和不同的字节数组.所以我正在构建n多部分请求并将其写入来自HttpServletResponse的流.
现在我的问题是如何在客户端解析响应并提取多个部分.
服务器代码链: -
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
// Prepare payload
builder.addBinaryBody("document1", file);
builder.addBinaryBody("document2", file2);
builder.addPart("stringData", new StringBody(jsonData, ContentType.TEXT_PLAIN));
// Set to request body
HttpEntity entity = builder.build();
postRequest.setEntity(entity);
Run Code Online (Sandbox Code Playgroud)
客户代码SNIPPET: -
HttpPost httpPost = new HttpPost(finalUrl);
StringEntity entity = new StringEntity(json);
httpPost.setEntity(entity);
httpPost.setHeader("Content-type", APPLICATION_JSON_TYPE);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CloseableHttpResponse response = httpClient.execute(httpPost);
InputStream in = new BufferedInputStream(response.getEntity().getContent());
Run Code Online (Sandbox Code Playgroud)
我检查了CloseableHttpResponse和HttpEntity,但它们都没有提供解析多部分请求的方法.
编辑1:这是我在客户端流收到的样本回复: -
--bvRi5oZum37DUldtLgQGSbc5RRVZxKpjZMO4SYDe
Content-Disposition: form-data; name="numeric"
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
01010110
--bvRi5oZum37DUldtLgQGSbc5RRVZxKpjZMO4SYDe
Content-Disposition: form-data; name="stringmessage"
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding:8bit
testmessage …Run Code Online (Sandbox Code Playgroud) 我有一个任务来实现发送http多部分请求和解释http多部分响应.我决定从响应开始,因为我只需要收到响应并解析它.我没有那么多的java经验,甚至更少的HTTP经验,这就是为什么我读了一些关于这个主题的文章和其他东西,但我还有一些未解决的问题:
如果有人可以向我澄清这些事情会很好,因为我觉得我误解了一些东西.
先感谢您!