1

I would like to upload a file from android device to server using php. Also I want to send the name of the file to a database with a WHERE statement. I can upload my file, but I can't send the WHERE statement, I don't know where and how to put it in the android source.

Here's my php code:

<form action="FileUp.php" method="post" enctype="multipart/form-data">
</form>

<?php

mysql_connect('localhost','root','root');
mysql_select_db('db');

$target_path  = "./";
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
$file = basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)){
echo "The file ".  basename( $_FILES['uploadedfile']['name']).
" has been uploaded";
} else{
echo "There was an error uploading the file, please try again!";
}
$ident=addslashes($_POST['ident']);

mysql_query ("UPDATE table SET column = CONCAT(column,'$file') WHERE id = '$ident'");

?>

And here's the java code:

@Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            String exsistingFileName = file.getText().toString();
            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);
            }

Please help where do I need to put my ident string to send to the php side! Thanks a lot!

1 Answers1

1

You can upload the Images via the MultipartEntity.

MultipartEntity, part of HttpMime 4.0 and later. Allows you to put multiple parts, separated by boundary strings and encoded using given charset, into httppost request.

For more info and how to use Multipart, see this and this.

Community
  • 1
  • 1
Shrikant
  • 6,769
  • 7
  • 38
  • 59
  • Thank You for Your reply! It's a good solution, but for me it doesn't work. Everytime I get Dalvik error, and I've already tried the tricks suggested... So I make to requests, it's not elegant, but works. Thanks! – AttilaBorbás Oct 16 '12 at 07:04
  • I thought that that jar files caused the Dalvik problem, but didn't. It occures everytime, and I don't know how to fix it. – AttilaBorbás Oct 16 '12 at 09:28
  • I've fixed the problem and now it works with Your solution. Sorry for it and thanks for Your help! – AttilaBorbás Oct 18 '12 at 16:01