Android file uploader with server-side php
Solution 1
Yeah, so I found the java-side of things. This works, so... yeah.
public class Uploader extends Activity {
private String Tag = "UPLOADER";
private String urlString = "YOUR_ONLINE_PHP";
HttpURLConnection conn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String exsistingFileName = "/sdcard/uploader/data/testfile";
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
try {
// ------------------ CLIENT REQUEST
Log.e(Tag, "Inside second Method");
FileInputStream fileInputStream = new FileInputStream(new File(
exsistingFileName));
// 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);
// Don't use a cached copy.
conn.setUseCaches(false);
// Use a post method.
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos
.writeBytes("Content-Disposition: post-data; name=uploadedfile;filename="
+ exsistingFileName + "" + lineEnd);
dos.writeBytes(lineEnd);
Log.e(Tag, "Headers are written");
// create a buffer of maximum size
int bytesAvailable = fileInputStream.available();
int maxBufferSize = 1000;
// int bufferSize = Math.min(bytesAvailable, maxBufferSize);
byte[] buffer = new byte[bytesAvailable];
// read file and write it into form...
int bytesRead = fileInputStream.read(buffer, 0, bytesAvailable);
while (bytesRead > 0) {
dos.write(buffer, 0, bytesAvailable);
bytesAvailable = fileInputStream.available();
bytesAvailable = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bytesAvailable);
}
// send multipart form data necesssary after file data...
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
// close streams
Log.e(Tag, "File is written");
fileInputStream.close();
dos.flush();
dos.close();
} catch (MalformedURLException ex) {
Log.e(Tag, "error: " + ex.getMessage(), ex);
}
catch (IOException ioe) {
Log.e(Tag, "error: " + ioe.getMessage(), ioe);
}
try {
BufferedReader rd = new BufferedReader(new InputStreamReader(conn
.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
Log.e("Dialoge Box", "Message: " + line);
}
rd.close();
} catch (IOException ioex) {
Log.e("MediaPlayer", "error: " + ioex.getMessage(), ioex);
}
}
}
Solution 2
If you want to upload files that is larger than 2MB you need to edit your PHP configuraton
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M
Eg:
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 10M
That would allow you to upload files up to 10MB of size
Solution 3
For the PHP side of things take a look at
move_uploaded_file
and also the global $_FILES
http://php.net/manual/en/function.move-uploaded-file.php
http://php.net/manual/en/features.file-upload.php
Jonathan Pitre
JOBS - September 2010 to December 2012 > Course Assistant (Intro. to Computing) at McGill University - May 2012 to July 2015 > Software Developer at Ericsson - July 2015 to Present > Java Developer at TC Média INTERNSHIPS - Summer 2010 > Software Engineer at McGill University - Summer 2011 > Programmer at BuildIT Software & Solutions Ltd. - Winter 2012 > Programmer at BuildIT Software & Solutions Ltd. STUDIES - D.E.C. > Health Sciences at Champlain College - B.Sc. > Major in Software Engineering at McGill University CERTIFICATIONS - McGill Scrum Master and Agile Leadership Certification FAVOURITE POSTS / LINKS How to ask and answer homework questions on stackoverflow. What have you tried?Technobabble
Updated on July 23, 2022Comments
-
Jonathan Pitre almost 2 years
I've been looking for a solution to this for hours, but I can't find any.
Basically, I want to upload, from my android device, files to an http website. However, I have no clue whatsoever how to do this. I'm using java on the device, and I would like to use PHP on the server-side of things. I just want to upload the files, not do anything fancy with them on the server.
Can anyone provide code and/or a good link to what I need? I have little to no experience in this, and I am at a loss.
Thanks, NS
PS. I have no experience in PHP coding.
-
PiyushMishra almost 13 yearsI tested this code but cant able to upload a file more than 2MB, any solution for that.
-
Jonathan Pitre almost 13 yearsSadly this code only works for small files. We ran into that problem, but we didn't need to upload more than a few kBs anyways, so we dismissed it. We're no longer working on that project. The way I see it it's either with "int bytesAvailable = fileInputStream.available();", where the fIS doesn't ever have more than 2MBs available (unlikely), or the byte buffer: int maxBufferSize = 1000; byte[] buffer = new byte[bytesAvailable]; Try changing the maxBufferSize to see what happens.
-
Jonathan Pitre over 12 yearsThanks for the clarification!
-
dsdsdsdsd almost 11 yearswhen you say "java-side of things", does that mean that this code is for a 'native app'??? .... because if so, then wouldn't there be an issue if the user does not have the app?? they would have to download it onto their android device first?? ... thanks.
-
Jonathan Pitre almost 11 years@dsdsdsdsd I haven't written for android in years, but IIRC this was a user-downloaded application. I don't know how an app could collect data if it wasn't downloaded on the device...
-
Gerard over 10 yearsIf 2 MB is not enough for you, and are not able to remove this restriction (as with many cheap webservers) you can try to use FTP client.
-
Mahesh about 10 yearshey i want to send also other parameter with this like imagename,title,description,imagecapture date time where to add this parameters in this