相关疑难解决方法(0)

如何使用JSP/Servlet将文件上传到服务器?

如何使用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)

java jsp servlets file-upload java-ee

671
推荐指数
7
解决办法
54万
查看次数

方便的方法来解析Servlet中传入的multipart/form-data参数

是否有任何方便的方法来读取和解析来自传入请求的数据.

例如客户发起邮寄请求

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 servlets urlconnection

63
推荐指数
3
解决办法
13万
查看次数

如何将servlet api添加到我的pom.xml中

如何将servlet API添加到项目的pom.xml中

mvnrepository.com有很多servlet api和类似命名的项目,我不知道哪个是正确的.或者他们都好吗?

java maven-2 servlets pom.xml

37
推荐指数
1
解决办法
6万
查看次数

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

我发送的一种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 parsing http multipartform-data multipartentity

7
推荐指数
2
解决办法
2万
查看次数

在客户端接收多部分响应(ClosableHttpResponse)

我有一个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)

java multipart apache-httpclient-4.x

5
推荐指数
1
解决办法
5673
查看次数

多部分请求/响应java

我有一个任务来实现发送http多部分请求和解释http多部分响应.我决定从响应开始,因为我只需要收到响应并解析它.我没有那么多的java经验,甚至更少的HTTP经验,这就是为什么我读了一些关于这个主题的文章和其他东西,但我还有一些未解决的问题:

  1. 据我所知,内容类型multipart用于文件上传,发送电子邮件附件等.我在谷歌发现的大多数帖子都是使用multipart/form-data进行文件上传的.在其他情况下使用这种内容类型?
  2. 我决定从HTTP多部分响应开始,但我意识到我不知道为了接收具有这种内容类型的响应我必须做什么.我的请求怎么样?我要求这个请求怎么办?我只想在java中编写一个简单的程序,它向服务器发送一个HTTP请求,并且收到的响应是内容类型的multipart.

如果有人可以向我澄清这些事情会很好,因为我觉得我误解了一些东西.

先感谢您!

java http multipart

3
推荐指数
1
解决办法
2万
查看次数