Java 创建包含多部分文件上载的post请求
我正在写一个简单的片段,它发送一个简单的post请求 目前,我正在构建如下请求:Java 创建包含多部分文件上载的post请求,java,http,multipartform-data,multipart,Java,Http,Multipartform Data,Multipart,我正在写一个简单的片段,它发送一个简单的post请求 目前,我正在构建如下请求: // Construct data String data = URLEncoder.encode("param1", "UTF-8") + "=" + URLEncoder.encode("val1", "UTF-8"); data += "&" + URLEncoder.encode("param2", "UTF-8") + "=" + URLEncoder.encode("va
// Construct data
String data = URLEncoder.encode("param1", "UTF-8") + "=" + URLEncoder.encode("val1", "UTF-8");
data += "&" + URLEncoder.encode("param2", "UTF-8") + "=" + URLEncoder.encode("val2", "UTF-8");
// Send data
URL url = new URL("http://server:8080/servlet/upload");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
// do stuff with response....
到目前为止,这是可行的。但是我需要添加一个文件上传作为一个多部分POST请求。
我该怎么做?如果可能的话,我希望避免使用commons中的
HttpClient
。至此,您需要使用和中指定格式的数据构造输出流。这是大量的工作,我不打算发布一个启动代码示例,抱歉:)但是RFC包含清晰的信息和几个示例,说明数据应该是什么样子。这是绝对可行的。说到这一点,您需要使用和中指定格式的数据构建输出流。这是大量的工作,我不打算发布一个启动代码示例,抱歉:)但是RFC包含清晰的信息和几个示例,说明数据应该是什么样子。这是绝对可行的。目前,您根本没有使用HTTP。如果你打算写一篇博文,你需要做的第一件事就是确保你发送了正确的头等等,这样你实际上是在进行HTTP连接。您需要遵循RFC1867()将文件内容正确编码到您的帖子中。这并不容易,这就是为什么有图书馆为你做这件事。所以我不得不问:为什么要避免HttpClient?我一直用它来达到这个目的。它可靠、完整、性能优良。您是否缺少(内存/磁盘)空间?目前,您根本不使用HTTP。如果你打算写一篇博文,你需要做的第一件事就是确保你发送了正确的头等等,这样你实际上是在进行HTTP连接。您需要遵循RFC1867()将文件内容正确编码到您的帖子中。这并不容易,这就是为什么有图书馆为你做这件事。所以我不得不问:为什么要避免HttpClient?我一直用它来达到这个目的。它可靠、完整、性能优良。你(内存/磁盘)空间不足吗?试试这个,因为我的情况就是这样
File f = new File(filePath);
PostMethod filePost = new PostMethod(url);
Part[] parts = { new FilePart("file", f) };
filePost.setRequestEntity(new MultipartRequestEntity(parts,
filePost.getParams()));
HttpClient client = new HttpClient();
status = client.executeMethod(filePost);
logger.info("upload status: " + status);
试试这个,因为这在我的情况下有效
File f = new File(filePath);
PostMethod filePost = new PostMethod(url);
Part[] parts = { new FilePart("file", f) };
filePost.setRequestEntity(new MultipartRequestEntity(parts,
filePost.getParams()));
HttpClient client = new HttpClient();
status = client.executeMethod(filePost);
logger.info("upload status: " + status);
这段代码片段对我很有用:
它没有任何外部依赖项,只有约150行代码(包括注释),比Apache HttpClient库更易于处理。这段代码片段对我很有用:
它没有任何外部依赖项,只有约150行代码(包括注释),比Apache HttpClient库更容易处理。为没有HTML部分的相同故事添加了RFC 2388:)为没有HTML部分的相同故事添加了RFC 2388:)我确实有一些集成问题,但是如果实现请求编码更容易,我将使用一个外部库。谢谢:)我确实有一些集成问题,但是如果实现请求编码更容易,我将使用外部库。谢谢:)