Hi Experts,
I need to post some files on my server, it works fine for small files
like 1mb but when i try for more than 4 mb ; it force close because of
memory overload.
please have a look on my code below:
URL url = new URL(uri);
URLConnection conn = url.openConnection();
String boundary = "myboundary";
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestProperty("Connection","Keep-Alive");
conn.setRequestProperty("user-
agent",this.user_agent);
conn.setRequestProperty("accept-
language",this.accept_language);
conn.setRequestProperty("user-agent-
id",this.user_agent_id);
conn.setRequestProperty("Content-Type","multipart/
form-data; boundary=" + boundary);
DataOutputStream wr = new DataOutputStream
(conn.getOutputStream());
// Send the normal form data
Iterator i = parameters.entrySet().iterator();
while (i.hasNext()) {
Map.Entry param = (Map.Entry)i.next();
wr.write( ("--" + boundary + "\r\n").getBytes
() );
wr.write( ("Content-Disposition: form-data; name=
\""+(String)param.getKey()+"\"\r\n\r\n").getBytes());
wr.write( ((String)param.getValue() +
"\r").getBytes());
wr.flush();
}
/* wr.write( ("\r--" + boundary + "--\r\n").getBytes
());
wr.flush();*/
if(includeFiles){
int bytesRead = 0;
byte [] buffer = new byte[1024*4];
InputStream is;
Iterator i2 = fileParameters.entrySet().iterator
();
while (i2.hasNext()) {
Map.Entry param = (Map.Entry)i2.next();
String filekey = (String)param.getKey();
String fileName = (String)param.getValue();
wr.write( ("--" + boundary + "\r\n").getBytes
() );
wr.write( ("Content-Disposition: form-data; name=
\""+(String)param.getKey()+"\"; ").getBytes());
if(filekey.endsWith("message[audio]")){
if(fileName.contains("/sdcard")){
wr.write( ("filename=\"" + fileName +
"\"\r").getBytes());
File file = new File(fileName);
Uri ab= Uri.parse(fileName);
is = new
FileInputStream(fileName);}
else {
wr.write( ("filename=\"" +
fileName.concat
(".amr") + "\"\r").getBytes());
is = this.cr.openInputStream( Uri.parse
(fileName));}
wr.write( ("Content-Type: audio \r\n\r
\n").getBytes());
wr.flush();
/*File file = new File(fileName);
Uri ab= Uri.parse(fileName);
is = new FileInputStream(fileName);*/
}
else{
if(fileName.contains("/sdcard")){
File file = new File(fileName);
//long temp=file.length();
Uri ab= Uri.parse(fileName);
is = new
FileInputStream(fileName);}
else {
is = this.cr.openInputStream( Uri.parse
(fileName));}
wr.write( ("filename=\"" + fileName +
"\"\r").getBytes());
wr.write( ("Content-Type: image \r\n\r
\n").getBytes());
wr.flush();
}
//FileInputStream is = new FileInputStream(new
File(fileName));
//bytesAvailable = is.available();
while( (bytesRead = is.read(buffer)) > 0) {
wr.write(buffer,0,bytesRead);
wr.flush();
}
if(i2.hasNext()){
wr.write( ("\r\n").getBytes());
}
}
}
wr.write( ("\r--" + boundary + "--\r\n").getBytes());
wr.flush();
wr.close();
}
///////////////////////////////
i believe there is somewhere memory leakage but dont know where, i
have done a lot research but not successfull.
please let me know if u figure out any problem in my code
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---