문제

I'm trying to upload an image stored on the phone into a linux directory. The code seems to run without errors and the exceptions don't catch any problems however the image isn't uploaded. A HTTP 200 ok response is sent back. Looking through the logcat the only warning displayed is:

Failure getting entry for 0x01080c1 (t=7 e=705) in package 0 (error -75)

I have made sure that I've used the internet permission statement in the android manifest and I've set the destination folder privileges to 777, is there something I'm missing out?

This is the android function:

public int uploadFile(String sourceFileUri) {


    String fileName = sourceFileUri;

    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(sourceFileUri);

    if (!sourceFile.isFile()) {

        dialog.dismiss();

        Log.e("uploadFile", "Source File not exist :"
                +uploadFilePath + "" + uploadFileName);

        runOnUiThread(new Runnable() {
            public void run() {
                messageText.setText("Source File not exist :"
                        +uploadFilePath + "" + uploadFileName);
            }
        });

        return 0;

    }
    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("uploaded_file", fileName);

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

            dos.writeBytes(twoHyphens + boundary + lineEnd);
            dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";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();
            String serverResponseMessage = conn.getResponseMessage();

            Log.i("uploadFile", "HTTP Response is : "
                    + serverResponseMessage + ": " + serverResponseCode);

            if(serverResponseCode == 200){

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

                        String msg = "File Upload Completed.\n\n See uploaded file here : \n\n"
                                +" http://www.androidexample.com/media/uploads/"
                                +uploadFileName;

                        messageText.setText(msg);
                        Toast.makeText(UploadToServer.this, "File Upload Complete.",
                                Toast.LENGTH_SHORT).show();
                    }
                });
            }

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

        } catch (MalformedURLException ex) {

            dialog.dismiss();
            ex.printStackTrace();

            runOnUiThread(new Runnable() {
                public void run() {
                    messageText.setText("MalformedURLException Exception : check script url.");
                    Toast.makeText(UploadToServer.this, "MalformedURLException",
                            Toast.LENGTH_SHORT).show();
                }
            });

            Log.e("Upload file to server", "error: " + ex.getMessage(), ex);
        } catch (Exception e) {

            dialog.dismiss();
            e.printStackTrace();

            runOnUiThread(new Runnable() {
                public void run() {
                    messageText.setText("Got Exception : see logcat ");
                    Toast.makeText(UploadToServer.this, "Got Exception : see logcat ",
                            Toast.LENGTH_SHORT).show();
                }
            });
            Log.e("Upload file to server Exception", "Exception : "
                    + e.getMessage(), e);
        }
        dialog.dismiss();
        return serverResponseCode;

    }

This is the PHP script

<?php

$file_path = "/var/www/images/";

$file_path = $file_path . basename( $_FILES['uploaded_file']['name']);

if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) {
    echo "success";
} else{
    echo "fail";
}
?>
도움이 되었습니까?

해결책

Try This It May Help You

            HttpURLConnection mHttpURLConnection = null;
            DataOutputStream mOutputStream = null;
            String strLineEnd = "\r\n";
            String strTwoHyphens = "--";
            strUpLoadServerUri = UploadServerPath;
            String strBoundary = "*****";
            int bytesRead, bytesAvailable, bufferSize;
            byte[] buffer;
            int maxBufferSize = 1 * 1024 * 1024;
            File sourceFile = new File(strUploadFiles);

            if (sourceFile.isFile()) {

                try {

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

                    // Open a HTTP connection to the URL

                    mHttpURLConnection = (HttpURLConnection) url
                            .openConnection();
                    mHttpURLConnection.setDoInput(true); // Allow Inputs
                    mHttpURLConnection.setDoOutput(true); // Allow Outputs
                    mHttpURLConnection.setUseCaches(false); // Don't use a Cached Copy

                    mHttpURLConnection.setRequestMethod("POST");
                    mHttpURLConnection.setRequestProperty("Connection","Keep-Alive");
                    mHttpURLConnection.setRequestProperty("ENCTYPE","multipart/form-data");
                    mHttpURLConnection.setRequestProperty("Content-Type","multipart/form-data;boundary=" + strBoundary);
                    mHttpURLConnection.setRequestProperty("uploaded_file",strUploadFiles);

                    mOutputStream = new DataOutputStream(mHttpURLConnection.getOutputStream());

                    mOutputStream.writeBytes(strTwoHyphens + strBoundary + strLineEnd);
                    mOutputStream.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename="+ strUploadFiles + strLineEnd);

                    mOutputStream.writeBytes(strLineEnd);

                    // 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) {

                        mOutputStream.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...
                    mOutputStream.writeBytes(strLineEnd);
                    mOutputStream.writeBytes(strTwoHyphens + strBoundary + strTwoHyphens + strLineEnd);

                    // Responses from the server (code and message)
                    serverResponseCode = mHttpURLConnection.getResponseCode();

                    // close the streams //
                    fileInputStream.close();
                    mOutputStream.flush();
                    mOutputStream.close();

                } catch (MalformedURLException ex) {
                    ex.printStackTrace();
                    Log.e("Upload file to server", "error: " + ex.getMessage(),ex);
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.e("Upload file to server Exception","Exception : " + e.getMessage(), e);
                }
            }

            if (serverResponseCode == 200) {

                Log.d("File Uploaded For ",strUploadFiles + "   Successful");
            }
            else{
                Log.d("File Uploaded For ",strUploadFiles + "   Failed");
            }

Hear strUploadFiles Is Your File Path

Your Serverside Code

<?php
        $Dir = "C:/Path/";

    if(!is_dir($Dir)) 
    {
        mkdir($Dir, 0777);
        chmod($Dir, 0777);
    }


    $file_path = $Dir.basename( $_FILES['uploaded_file']['name']);

 ?>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top