Je ne sais pas si je suis en train d'envoyer mon fichier directement à l'API web. Parce que rien ne donne une erreur au client code de demande. Mais quand je reçois la réponse au serveur il me donne une exception java.io.FileNotFoundException. Donc, je pense qu'il ya un problème dans mon code de demande parce qu'il ne télécharge aucun fichier sur le serveur web et je pense que c'est pourquoi je reçois le java.io.FileNotFoundException. S'il vous plaît aidez-moi à ce merci.Pourquoi j'obtiens java.io.FileNotFoundException pour obtenir la réponse à mon httpUrlConnection?
HttpURLConnection conn = null;
DataOutputStream dos = null;
String samplefile = "storage/sdcard0/Pictures/Images/productshot.jpg";
String urlString = "http://avasd.server.com.ph:1217/api/fileupload";
File mFile = new File(samplefile);
int mychunkSize = 2048 * 1024;
final long size = mFile.length();
final long chunks = size < mychunkSize? 1: (mFile.length()/mychunkSize);
int chunkId = 0;
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 2 * 1024 * 1024;
try {
//Client Request
FileInputStream stream = new FileInputStream(mFile);
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "-------------------------acebdf13572468";// random data
String param1 = ""+chunkId;
String param2 = ""+chunks;
String param3 = mFile.getName();
String param4 = samplefile;
for (chunkId = 0; chunkId < chunks; chunkId++) {
URL url = new URL(urlString);
// Open a HTTP connection to the URL
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(20000 /* milliseconds */);
conn.setConnectTimeout(20000 /* milliseconds */);
// Allow Inputs
conn.setDoInput(true);
// Allow Outputs
conn.setDoOutput(true);
// Don't use a cached copy.
conn.setUseCaches(false);
// Use a post method.
conn.setRequestMethod("POST");
String encoded = Base64.encodeToString((_username+":"+_password).getBytes(),Base64.NO_WRAP);
conn.setRequestProperty("Authorization", "Basic "+encoded);
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setChunkedStreamingMode(0);
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);
int length = (int) (param2.length() + param3.length() + mFile.length() + encoded.length() + lineEnd.length() + twoHyphens.length() + boundary.length());
conn.connect();
dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(twoHyphens + boundary + lineEnd);
// Send parameter #file
dos.writeBytes("Content-Disposition: form-data; name=\"fieldNameHere\";filename=\"" + mFile.getName() + "\"" + lineEnd); // filename is the Name of the File to be uploaded
dos.writeBytes("Content-Type: image/jpeg" + lineEnd);
dos.writeBytes(lineEnd);
// Send parameter #chunks
dos.writeBytes("Content-Disposition: form-data; name=\"chunk\"" + lineEnd);
dos.writeBytes(param2 + lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
// Send parameter #name
dos.writeBytes("Content-Disposition: form-data; name=\"name\"" + lineEnd);
dos.writeBytes(param3 + lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
bytesAvailable = stream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
// read file and write it into form...
bytesRead = stream.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = stream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = stream.read(buffer, 0, bufferSize);
Log.i("BytesAvailable", String.valueOf(bytesAvailable));
Log.i("bufferSize", String.valueOf(bufferSize));
Log.i("Bytes Read", String.valueOf(bytesRead));
Log.i("buffer", String.valueOf(buffer));
}
// send multipart form data necesssary after file data...
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
// close streams
stream.close();
dos.flush();
dos.close();
Log.i("DOS: ", String.valueOf(dos.size()));
}
} catch (MalformedURLException ex) {
System.out.println("From CLIENT REQUEST:" + ex);
}catch (IOException ioe) {
System.out.println("From CLIENT REQUEST:" + ioe);
}catch (Exception e) {
Log.e("From CLIENT REQUEST:", e.toString());
}
//Server Response
try {
System.out.println("Server response is: \n");
DataInputStream inStream = new DataInputStream(conn.getInputStream());
String str;
while ((str = inStream.readLine()) != null) {
System.out.println(str);
System.out.println("");
}
inStream.close();
System.out.println("\nEND Server response ");
} catch (IOException ioex) {
System.out.println("From (ServerResponse): " + ioex);
}
Pouvez-vous poster le logcat parce que vous avez décrit, il est bizarre pour un 'FileNotFoundException' jeté dans la partie "réponse du serveur". – user2652394
Voici mon logcat: 08-14 17: 06: 56.843: I/System.out (22488): De (ServerResponse): java.io.FileNotFoundException: http://avasd.server.com.ph:1217/api/ fileupload – NewDroidDev
C'est bizarre, mais je pense que quand vous 'dos.close();' le 'conn' est également fermé. Essayez de fermer dos après la réponse du serveur. J'espère que cela t'aides. – user2652394