2010-07-29 2 views
2

Я пытаюсь отправить файл в Servlet. Наряду с этим файлом я также должен отправить некоторые параметры (например, имя/идентификатор, дату и несколько других). Я использую 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"); 

что означает, что параметр не рассматривается как параметр, может быть?

Единственное, что я получил, это настройка этих параметров в качестве заголовков (setHeader и getHeader), но это не вариант.

Любые советы? Или, может быть, вы можете перенаправить меня на полный пример загрузки файла + параметров?
Спасибо,
Alex

ответ

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(); 

Вам также необходимо добавить внешнюю банку апачского-mime4j-0.6.jar (org.apache.james.mime4j) в противном случае

reqEntity.addPart("bin", bin); 

не компилировался.

+0

да, но это 3.x. Он хочет 4.0 – Bozho

+0

Да, я использую 4.0.1! – Alex

+0

@Alex Я обновил свой ответ – YoK

1

Если вы используете сервлет 3.0, вы можете попробовать добавить @MultipartConfig на свой сервлет.