fichier en plusieurs parties-télécharger, afficher la demande de java
Je suis en train de faire un programme qui télécharge une image à un serveur qui accepte les fichier en plusieurs parties téléchargements.
Plus spécifiquement je veux faire une requête http POST pour http://iqs.me qui envoie un fichier dans la variable "pic".
J'ai fait beaucoup d'essais, mais je ne sais pas si j'ai même été proche. La partie la plus difficile semble être d'obtenir un HttpURLConnection pour faire une requête de type POST. La réponse que je reçois dirait qu'il fait un GET.
(Et je veux le faire sans aucune tierce partie libs)
Mise à JOUR: non-utilisation de code se trouve ici (pas d'erreurs, mais ne semble pas faire un POST):
HttpURLConnection conn = null;
BufferedReader br = null;
DataOutputStream dos = null;
DataInputStream inStream = null;
InputStream is = null;
OutputStream os = null;
boolean ret = false;
String StrMessage = "";
String exsistingFileName = "myScreenShot.png";
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1*1024*1024;
String responseFromServer = "";
String urlString = "http://iqs.local.com/index.php";
try{
FileInputStream fileInputStream = new FileInputStream( new File(exsistingFileName) );
URL url = new URL(urlString);
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setUseCaches(false);
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);
dos = new DataOutputStream( conn.getOutputStream() );
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"pic\";" + " filename=\"" + exsistingFileName +"\"" + lineEnd);
dos.writeBytes(lineEnd);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0){
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
fileInputStream.close();
dos.flush();
dos.close();
}catch (MalformedURLException ex){
System.out.println("Error:"+ex);
}catch (IOException ioe){
System.out.println("Error:"+ioe);
}
try{
inStream = new DataInputStream ( conn.getInputStream() );
String str;
while (( str = inStream.readLine()) != null){
System.out.println(str);
}
inStream.close();
}catch (IOException ioex){
System.out.println("Error: "+ioex);
}
Merci de poster votre code, sinon on ne peut guère vous aider...
Okay code ajouté 🙂
Je n'ai pas le temps d'aller à travers l'ensemble de ce droit maintenant, mais j'ai posté des réponses avec des exemples de code avant, vous trouverez peut-être utile: ici et un here. Pour garder toute la verbosité vers le bas et la facilité tout le travail, je vous recommande fortement d'aller de l'avant avec Apache HttpComponents HttpClient.
Qui a résolu, de très bons exemples. Merci!
Voulez-vous me poster une réponse, de sorte que vous pouvez l'accepter?
Okay code ajouté 🙂
Je n'ai pas le temps d'aller à travers l'ensemble de ce droit maintenant, mais j'ai posté des réponses avec des exemples de code avant, vous trouverez peut-être utile: ici et un here. Pour garder toute la verbosité vers le bas et la facilité tout le travail, je vous recommande fortement d'aller de l'avant avec Apache HttpComponents HttpClient.
Qui a résolu, de très bons exemples. Merci!
Voulez-vous me poster une réponse, de sorte que vous pouvez l'accepter?
OriginalL'auteur Martin | 2010-04-15
Vous devez vous connecter pour publier un commentaire.
Deux choses:
Assurez-vous que vous appel setRequestMethod pour définir la requête HTTP à un POSTE. Vous devez être averti que le faire en plusieurs parties requêtes POST à la main est difficile et sujette à erreur.
Si vous êtes en cours d'exécution sur *NIX, l'outil netcat est très utile pour le débogage de ce genre de choses. Exécuter
netcat -l -p 3000
et le point de votre programme sur le port 3000; vous verrez exactement ce que le programme de l'envoi (Control-C pour le fermer après).
Le
setDoOutput(true)
déjà, implicitement, il définit à la poste.OriginalL'auteur James Kingsbery
J'ai utilisé cette et trouve qu'il est utile dans plusieurs parties de téléchargement de fichiers
OriginalL'auteur Aashish Katta