Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
420 views
in Technique[技术] by (71.8m points)

upload - problem with uploading captured image in android camera

In my app I am trying to capture an image from my device and I want to upload it to a server. I am following the answer which was posted here

Following is my code for starting camera

 startBtn = (Button) findViewById(R.id.startBtn);
 startBtn.setOnClickListener(new View.OnClickListener() 
  {
    public void onClick(View v) 
       {
            startCamera();
        }
    });
}

public void startCamera() 
{        
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
    intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );
    startActivityForResult( intent, 0 );
}

But after i capture and when i try to upload it gets crashed. In logcat it shows the error at OnActivity result and in the doFileUpload

Following is my code

   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {   
        switch( resultCode )
        {
            case 0:
                break;

            case -1:
                onPhotoTaken();
                break;
        }
    }

    protected void onPhotoTaken()
    {
        doFileUpload(MediaStore.EXTRA_OUTPUT);
    }

    private void doFileUpload(String extraOutput)
    {
        HttpURLConnection connection = null;
        DataOutputStream outputStream = null;
        DataInputStream inStream = null;        
        String urlServer = "http:XXXXXXXXXXXXXXXXXXXXXX/upload.php";
        String lineEnd = "
";
        String twoHyphens = "--";
        String boundary =  "*****";
        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1*1024*1024;
        FileInputStream fileInputStream = new FileInputStream(new File(extraOutput) );
        URL url = new URL(urlServer);
        connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setUseCaches(false);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);
        outputStream = new
        DataOutputStream( connection.getOutputStream() );
        outputStream.writeBytes(twoHyphens + boundary + lineEnd);
        outputStream.writeBytes("Content-Disposition: form-data; name="userfile";filename="" + extraOutput +""" + lineEnd);
        outputStream.writeBytes(lineEnd);
        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        buffer = new byte[bufferSize];
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        while (bytesRead > 0)
        {
            outputStream.write(buffer, 0, bufferSize);
            bytesAvailable = fileInputStream.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        }
        outputStream.writeBytes(lineEnd);
        outputStream.writeBytes(twoHyphens + boundary + twoHyphens +lineEnd);
        int serverResponseCode = connection.getResponseCode();
        String serverResponseMessage = connection.getResponseMessage();       
        fileInputStream.close();
        outputStream.flush();
        outputStream.close();
     }

Please help me in fixing my error......plz

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I am using this code for uploading image from my device to server

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.v("Test", "IGA");
    if (resultCode == RESULT_OK) {
        if (requestCode == SELECT_PICTURE) {
            selectedImageUri =(Uri)data.getData();
            AddCourtActivity.mImage.setImageURI(selectedImageUri);
            selectedImagePath = getPath(selectedImageUri);
            imagePath=selectedImagePath;
            Log.v("Test","IGA "+imagePath);
        } else if (requestCode == CAMERA_PIC_REQUEST) {

            Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
            selectedImageUri = data.getData();
            selectedImagePath = getPath(selectedImageUri);
            imagePath=selectedImagePath;

            Log.v("Test","IGA1 "+imagePath);
            AddCourtActivity.mImage.setImageBitmap(thumbnail);
        }
    }
    if (resultCode == RESULT_CANCELED) {

        return;
    }
}

public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}
public String getPath1(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor
            .getColumnIndexOrThrow("userImage"/*MediaStore.Images.Media.DATA*/);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}
}

//Use this class for upload image to server


public class FileUploader {

private String Tag = "UPLOADER";
private String urlString;// = "YOUR_ONLINE_PHP";
HttpURLConnection conn;
String exsistingFileName;
public String result;

public String uploadImageData(String serverImageTag) {// Server image tag
                                                        // may be
                                                        // courtImage[] or
                                                        // userImage
    String lineEnd = "
";
    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);
        if (serverImageTag.equalsIgnoreCase("courtImage")) {
            dos.writeBytes("Content-Disposition: post-data; name=courtImage[];filename="
                    + exsistingFileName + "" + lineEnd);
        } else if (serverImageTag.equalsIgnoreCase("userImage")) {
            dos.writeBytes("Content-Disposition: post-data; name=userImage[];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 necessary after file data...

        dos.writeBytes(lineEnd);
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

        String serverResponseMessage = conn.getResponseMessage();
        BufferedReader rd = new BufferedReader(new InputStreamReader(
                conn.getInputStream()));

        // String serverResponseCode = conn.
        // String serverResponseMessage = conn.getResponseMessage();

        while ((result = rd.readLine()) != null) {

            Log.v("result", "result " + result);

                Login.fbResponse = result;

        }
        // close streams
        Log.e(Tag, "File is written");
        fileInputStream.close();
        dos.flush();
        dos.close();
        rd.close();
    } catch (MalformedURLException ex) {
        Log.e(Tag, "error: " + ex.getMessage(), ex);
    }

    catch (IOException ioe) {
        Log.e(Tag, "error: " + ioe.getMessage(), ioe);
    }

    // Parsing has finished.
    return result;
}

public FileUploader(String existingFileName, String urlString) {

    this.exsistingFileName = existingFileName;
    this.urlString = urlString;

}

Just pass the existingFileName, urlString in the constructor then the file is upload .

}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...