2010-07-29 70 views
2

我试图将文件发送到Servlet。 与此文件一起,我还必须发送一些参数(即名称/ ID,日期和其他几个参数)。我在客户端使用HttpClient,在服务器端使用ServerFileUpload。将参数添加到Apache HttpPost

这是客户端代码: ...

String url = "http://localhost:8080/RicezioneServlet/RicezioneServlet"; 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost postMethod = new HttpPost(url); 
MultipartEntity mpe = new MultipartEntity(); 
//I'm sending a .zip file 
ContentBody cb = new FileBody(fileToSend,"application/zip"); 
mpe.addPart("file", cb); 
postMethod.setEntity(mpe); 
HttpResponse resp = httpclient.execute(postMethod); 
HttpEntity respEntity = resp.getEntity(); 
System.out.println(resp.getStatusLine()); 

...

在服务器端,我们有:

ServletFileUpload sup = new ServletFileUpload(); 
FileItemIterator it = sup.getItemIterator(request); 
FileItemStream item = it.next(); 
InputStream ios = item.openStream(); 
//read from ios and write to a fileoutputstream. 

现在,我不知道如何将上述参数添加到请求中...我尝试使用StringBody并将其添加到MultiPartEntity,但是我得到一个NullPointerException:

String author = request.getParameter("author"); 

这意味着该参数不被视为参数,也许?

唯一让我工作的是将这些参数设置为Headers(setHeader和getHeader),但这不是一个选项。

有什么建议吗?或者,也许你可以将我重定向到full文件+参数上传的示例?
谢谢,
亚历

回答

3

尝试使用类似的代码粘贴为这里:

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost(url); 

FileBody bin = new FileBody(new File(fileName)); 
StringBody comment = new StringBody("Filename: " + fileName); 

MultipartEntity reqEntity = new MultipartEntity(); 
reqEntity.addPart("bin", bin); 
reqEntity.addPart("comment", comment); 
httppost.setEntity(reqEntity); 

HttpResponse response = httpclient.execute(httppost); 
HttpEntity resEntity = response.getEntity(); 

您还需要添加外部JAR Apache的mime4j-0.6.jar(org.apache.james.mime4j )否则

reqEntity.addPart("bin", bin); 

不会编译。

+0

是的,但那是3.x.他想要4.0 – Bozho 2010-07-30 12:38:30

+0

是的,我正在使用4.0.1! – Alex 2010-07-30 19:13:30

+0

@Alex我已更新我的回答 – YoK 2010-08-02 14:38:15

1

如果您使用servlet 3.0,您可以尝试将@MultipartConfig添加到您的servlet上。