3 votes

Android à servlet téléchargement d'images à sauvegarder sur le serveur

J'ai créé une servlet qui accepte une image de mon application Android. Je reçois des octets sur ma servlet, mais je veux pouvoir enregistrer cette image avec le nom original sur le serveur. Comment puis-je faire cela ? Je ne veux pas utiliser Apache Commons. Y a-t-il une autre solution qui pourrait me convenir ?

merci

5voto

BalusC Points 498232

Envoyez-le en tant que multipart/form-data avec l'aide de MultipartEntity de la classe intégrée d'Android API HttpClient .

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

Et ensuite dans la servlet doPost() utiliser la méthode Apache Commons FileUpload pour extraire la pièce.

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

Je ne veux pas utiliser apache commons

À moins que vous n'utilisiez Servlet 3.0 qui supporte multipart/form-data demande hors de la boîte avec [HttpServletRequest#getParts()](http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getParts()) vous devrez réinventer vous-même un analyseur de données multipart/form-data basé sur RFC2388 . Cela va seulement vous mordre sur le long terme. Dur. Je ne vois vraiment pas pourquoi vous ne l'utiliseriez pas. Est-ce de l'ignorance pure et simple ? C'est au moins pas si difficile. Laisse tomber commons-fileupload.jar et commons-io.jar sur /WEB-INF/lib et utiliser l'exemple ci-dessus. C'est tout. Vous pouvez trouver ici un autre exemple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X