0

i want to upload any image file to host from android with php remote file . this is my php code :

<?php
$uploaddir = 'question_images/';
$ran = rand () ;

$file = basename($_FILES['userfile']['name']);
$uploadfile = $uploaddir .$ran.$file;

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
        echo "~/question_images/{$uploadfile}";
}
?>

you can see in my code when upload success return file name and file path with echo command .

and this is my android code :

private String UploadImage(String FilePath) {
    String UploadPath = "";
    String fileName = FilePath;
    HttpURLConnection conn = null;
    DataOutputStream dos = null;
    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary = "*****";
    int bytesRead, bytesAvailable, bufferSize;
    byte[] buffer;
    int maxBufferSize = 1 * 1024 * 1024;
    File sourceFile = new File(FilePath);

    if (!sourceFile.isFile()) {

        runOnUiThread(new Runnable() {
            public void run() {

            }
        });
    } else {
        try {

            // open a URL connection to the Servlet
            FileInputStream fileInputStream = new FileInputStream(
                    sourceFile);
            URL url = new URL(upLoadServerUri);

            // Open a HTTP connection to the URL
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true); // Allow Inputs
            conn.setDoOutput(true); // Allow Outputs
            conn.setUseCaches(false); // Don't use a Cached Copy
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setRequestProperty("ENCTYPE", "multipart/form-data");
            conn.setRequestProperty("Content-Type",
                    "multipart/form-data;boundary=" + boundary);
            conn.setRequestProperty("userfile", fileName);

            dos = new DataOutputStream(conn.getOutputStream());

            dos.writeBytes(twoHyphens + boundary + lineEnd);
            dos.writeBytes("Content-Disposition: form-data; name=\"userfile\";filename=\""
                    + fileName + "\"" + 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);

            // Responses from the server (code and message)
            serverResponseCode = conn.getResponseCode();
            UploadPath = conn.getResponseMessage();

            if (serverResponseCode == 200) {

                runOnUiThread(new Runnable() {
                    public void run() {

                    }
                });
            }

            // close the streams //
            fileInputStream.close();
            dos.flush();
            dos.close();
            return UploadPath;

        } catch (MalformedURLException ex) {

            ex.printStackTrace();

            runOnUiThread(new Runnable() {
                public void run() {

                }
            });
            return UploadPath;

        } catch (Exception e) {

            e.printStackTrace();

            runOnUiThread(new Runnable() {
                public void run() {

                }
            });
            return UploadPath;
        }

    } // End else block
    return UploadPath;
}

every things ok but i want get file path from php echo command . (php save file with random name for make unique files) .

please help me

Mr.Milad
  • 57
  • 2
  • 12

1 Answers1

1

If you had formulated better you would have had more to the point reactions. You want to read from the response the path the script echoed back. You did not say that you already tried with UploadPath and got a silly message. Please do next time.

UploadPath = conn.getResponseMessage();

But that will not do.

You have to open a DataInputStream to read the echos from the php script in a String. Then from the response you can parse out the path under which the script saved the file.

And: let your script also echo something in case of error(s).

greenapps
  • 11,154
  • 2
  • 16
  • 19