Je travaille dans android. Je suis en train de concevoir un programme pour télécharger un fichier sur le serveur http. Mais quand j'exécute ce programme et que je sélectionne un fichier qui a un peu plus de taille, cela va générer une erreur de suivi.sur Erreur de mémoire dans android
java.lang.OutOfMemoryError
at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:218)
ERROR/AndroidRuntime(557): at
org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl$DefaultHttpOut
putStream.write(HttpURLConnectionImpl.java:750)
10-15 03:08:32.113: ERROR/AndroidRuntime(557): at
java.io.DataOutputStream.write(DataOutputStream.java:101)
ceci est mon fichier à télécharger: -
HttpURLConnection conn = null;
DataOutputStream dos = null;
DataInputStream inStream = null;
String existingFileName = "/mnt/sdcard/kuntal.PNG";
Log.v("File upload",""+Environment.getExternalStorageDirectory().getAbsolutePath());
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1*1024*1024;
String responseFromServer = "";
Log.v(TAG,"url= ");
String urlString = "http://192.168.1.126/MusicApplication/uploadmusic.php?title="+title_by_artist+"&category="+category_of_song+"&filename="+filename+"&price="+price_of_song+"&artist="+HomePageActivity.username;
Log.v(TAG,"url= "+urlString);
try
{
//------------------ CLIENT REQUEST
FileInputStream fileInputStream = new FileInputStream(new File(existingFileName));
// open a URL connection to the Servlet
URL url = new URL(urlString);
// Open a HTTP connection to the URL
conn = (HttpURLConnection) url.openConnection();
// Allow Inputs
conn.setDoInput(true);
// Allow Outputs
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
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=\"uploadedfile\";filename=\"" + existingFileName + "\"" + lineEnd);
dos.writeBytes(lineEnd);
// create a buffer of maximum size
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
// read file and write it into form...
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);
}
// send multipart form data necesssary after file data...
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
// close streams
Log.e("Debug","File is written");
fileInputStream.close();
dos.flush();
dos.close();
Toast.makeText(this, "File Successfully Uploaded", Toast.LENGTH_SHORT).show();
}
catch (MalformedURLException ex)
{
Log.e("Debug", "error: " + ex.getMessage(), ex);
}
catch (IOException ioe)
{
Log.e("Debug", "error: " + ioe.getMessage(), ioe);
}
//------------------ read the SERVER RESPONSE
try {
inStream = new DataInputStream (conn.getInputStream());
String str;
while ((str = inStream.readLine()) != null)
{
Log.e("Debug","Server Response "+str);
}
inStream.close();
}
catch (IOException ioex){
Log.e("Debug", "error: " + ioex.getMessage(), ioex);
}
}
**and this is my php file for upload:-**
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path))
{
echo "The file ". basename($_FILES['uploadedfile']['name']).
" has been uploaded";
chmod ("Songs/".basename($_FILES['uploadedfile']['name']), 0644);
}
else
{
echo "filename: " . basename($_FILES['uploadedfile']['name']);
echo "target_path: " .$target_path;
}
s'il vous plaît aidez-moi ce que dois-je faire pour télécharger le fichier d'une petite taille plus grande comme en format MP3. Merci d'avance ...
je ne comprenais pas, comment peut-u remplacer la boucle while? pouvez-vous dire quel code exact avez-vous ajouté dans la boucle while? while (bytesRead> 0) – ghostCoder
Il ne peut pas. Avec cette solution, il ne peut télécharger que des fichiers jusqu'à un mégaoctet (son maxBufferSize). – marsbear