9

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.

Jonathan Pitre
  • 2,355
  • 3
  • 22
  • 38

3 Answers3

11

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);
        }
    }
}
hasanghaforian
  • 13,858
  • 11
  • 76
  • 167
Jonathan Pitre
  • 2,355
  • 3
  • 22
  • 38
  • 1
    I tested this code but cant able to upload a file more than 2MB, any solution for that. – PiyushMishra Jul 21 '11 at 06:15
  • Sadly 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 Jul 21 '11 at 12:26
  • when 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. – dsdsdsdsd Jun 17 '13 at 21:21
  • @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... – Jonathan Pitre Jun 18 '13 at 12:27
  • If 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. – Gerard Oct 26 '13 at 19:13
  • hey i want to send also other parameter with this like imagename,title,description,imagecapture date time where to add this parameters in this – Mahesh Feb 26 '14 at 07:11
9

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

kuchi
  • 840
  • 11
  • 19
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

Lizard
  • 43,732
  • 39
  • 106
  • 167