Client Http Java pour télécharger le fichier sur POST
Je suis le développement d'un client J2ME qui doit télécharger un fichier à une Servlet utilisant le protocole HTTP.
La servlet partie est couverte à l'aide d'Apache Commons FileUpload
protected void doPost(HttpServletRequest request, HttpServletResponse response)
{
ServletFileUpload upload = new ServletFileUpload();
upload.setSizeMax(1000000);
File fileItems = upload.parseRequest(request);
//Process the uploaded items
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
File file = new File("\files\\"+item.getName());
item.write(file);
}
}
Communes de Téléchargement semble être en mesure de télécharger seul fichier en plusieurs parties, mais aucune application/octect-stream.
Mais pour le côté client il n'y a pas Multipart classes, ni, dans ce cas, il est possible d'utiliser tous les HttpClient bibliothèque.
Autre option pourrait être d'utiliser HTTP Morceau de téléchargement, mais je n'ai pas trouvé un exemple clair de la façon dont cela pourrait être mis en œuvre, spécialement sur le servlet côté.
Mes choix sont:
- Mettre en œuvre une servlet http morceau de téléchargement
- Mettre en œuvre un raw client pour http multipart création
Je ne sais pas comment la mettre aucune des options ci-dessus.
Toute suggestion?
source d'informationauteur Clark Ku
Vous devez vous connecter pour publier un commentaire.
L'envoi de fichiers via HTTP est censé avoir lieu à l'aide de
multipart/form-data
encodage. Votre servlet partie est très bien comme il utilise déjà Apache Commons FileUpload pour analyser unmultipart/form-data
demande.Votre client de la partie, cependant, est apparemment pas bien comme vous êtes apparemment écrit le contenu d'un fichier raw pour le corps de la requête. Vous devez vous assurer que votre client envoie une bonne
multipart/form-data
demande. Exactement comment le faire dépend de l'API que vous utilisez pour envoyer la requête HTTP. Si c'est la plaine de la vanillejava.net.URLConnection
alors vous pouvez trouver un exemple concret, quelque part près du bas de cette réponse. Si vous utilisez Apache HttpComponents Client pour cela, voici un exemple concret:Sans rapport avec à la de béton problème, il y a un bug dans votre code côté serveur:
Ce sera susceptible d'écraser tout fichier téléchargé avec le même nom. Je vous suggère d'utiliser
Fichier#createTempFile()
pour cela à la place.Code suivant peut être utilisé pour télécharger le fichier avec l'adresse HTTP du Client 4.x (réponse ci-Dessus utilise MultipartEntity qui est obsolète maintenant)
Sans entrer en détails sanglants votre code semble correct.
Maintenant, vous devez le côté serveur. Je vous recommande d'utiliser Jakarta FileUploadde sorte que vous n'avez pas à mettre en œuvre quoi que ce soit. Il vous suffit de déployer et à configurer.