Добавить параметры в Apache HttpPost - PullRequest
2 голосов
/ 30 июля 2010

Я пытаюсь отправить файл в сервлет.Наряду с этим файлом, я также должен отправить некоторые параметры (например, имя / идентификатор, дата и некоторые другие).Я использую HttpClient на стороне клиента и ServerFileUpload на стороне сервера.

Это код на стороне клиента: ...

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), но это не вариант.

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

Ответы [ 2 ]

3 голосов
/ 30 июля 2010

Попробуйте использовать код, подобный приведенному здесь:

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

не будет компилироваться.

1 голос
/ 15 апреля 2013

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

...