Отправьте его как multipart / form-data запрос с помощью MultipartEntity
класса встроенного в Android HttpClient API .
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://example.com/uploadservlet");
MultipartEntity entity = new MultipartEntity();
entity.addPart("fieldname", new InputStreamBody(fileContent, fileContentType, fileName));
httpPost.setEntity(entity);
HttpResponse servletResponse = httpClient.execute(httpPost);
А затем в методе doPost()
сервлета используйте Apache Commons FileUpload для извлечения части.
try {
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
if (item.getFieldName().equals("fieldname")) {
String fileName = FilenameUtils.getName(item.getName());
String fileContentType = item.getContentType();
InputStream fileContent = item.getInputStream();
// ... (do your job here)
}
}
} catch (FileUploadException e) {
throw new ServletException("Cannot parse multipart request.", e);
}
Я не хочу использовать Apache Commons
Если вы не используете Servlet 3.0, который поддерживает multipart/form-data
запрос коробки с HttpServletRequest#getParts()
, вам придется заново изобретать анализатор multipart / form-data самостоятельно на основе RFC2388 . Это только укусит вас в долгосрочной перспективе. Жесткий. Я действительно не вижу причин, по которым вы бы не использовали его. Это просто невежество? По крайней мере, это не так сложно. Просто поместите commons-fileupload.jar
и commons-io.jar
в папку /WEB-INF/lib
и используйте приведенный выше пример. Вот и все. Вы можете найти здесь другой пример.