Android - Send Image file to the Server DB

你。 提交于 2019-11-29 00:25:03

You can convert the selected image to base 64 string and then pass that string to the server and then in the server decode that,

Check this code to convert image to base64,If you have the imageView then you can write this code,

imageView.buildDrawingCache();
Bitmap bm = imageView.getDrawingCache();
ByteArrayOutputStream baos = new ByteArrayOutputStream();  
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object   
byte[] b = baos.toByteArray();

String encodedImage = Base64.encodeToString(b , Base64.DEFAULT);

EDIT

as in your code,you have the byte array in this line,

image = extras.getByteArray("blob");

so you can directly write this line of code after that,

String encodedImage = Base64.encodeToString(image , Base64.DEFAULT);

I use the following code to upload image to php server. Notice uploadFile function you just have to pass your path of image from sdcard.

public class PhotosActivity extends Activity {
    ImageView img, img1;
    int column_index;
    Intent intent = null;
    Bitmap bitmap = null;
    FileInputStream in1, in2, in3;
    BufferedInputStream buf;
    // Declare our Views, so we can access them later
    String logo, imagePath, Logo;
    Cursor cursor;

    private String Tag = "UPLOADER";
    private String urlString = "YOUR_ONLINE_PHP";
    HttpURLConnection conn;
    // YOU CAN EDIT THIS TO WHATEVER YOU WANT
    private static final int SELECT_PICTURE = 1;

    String selectedImagePath;
    // ADDED
    String filemanagerstring;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.photos1_layout);
        // ListView iv= (ListView)findViewById(R.id.listView1);
        // iv.setAdapter(new ArrayAdapter(this,
        // android.R.layout.simple_list_item_1, values));
        // iv.setAdapter(new
        // ArrayAdapter(this,android.R.layout.simple_list_item_1, values));
        img = (ImageView) findViewById(R.id.imageView1);

    }

    public void onClick(View v) {
        // select a file
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"),
                SELECT_PICTURE);

    }

    String path = "";


    // UPDATED
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == SELECT_PICTURE) {
                Uri selectedImageUri = data.getData();

                // OI FILE Manager
                filemanagerstring = selectedImageUri.getPath();

                // MEDIA GALLERY
                selectedImagePath = getPath(selectedImageUri);

                img.setImageURI(selectedImageUri);

                imagePath.getBytes();
                path = imagePath.toString();
                // TextView txt = (TextView)findViewById(R.id.title);
                // txt.setText(imagePath.toString());

                Bitmap bm = BitmapFactory.decodeFile(imagePath);

                uploadFile(imagePath.toString());

            }

        }

    }

    public int uploadFile(String sourceFileUri) {
        String upLoadServerUri = "http://"+common.ipaddress+"/database/upload.php";
        String fileName = sourceFileUri;
        int serverResponseCode = 0;
        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()) {
            Log.e("uploadFile", "Source File Does not exist");
            return 0;
        }
        try { // open a URL connection to the Servlet
            FileInputStream fileInputStream = new FileInputStream(sourceFile);
            URL url = new URL(upLoadServerUri);
            conn = (HttpURLConnection) url.openConnection(); // Open a HTTP
                                                                // connection to
                                                                // the URL
            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=\"uploaded_file\";filename=\""
                    + fileName + "\"" + lineEnd);
            dos.writeBytes(lineEnd);

            bytesAvailable = fileInputStream.available(); // create a buffer of
                                                            // maximum size

            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() {
                        // tv.setText("File Upload Completed.");
                        Toast.makeText(PhotosActivity.this,
                                "File Upload Complete.", Toast.LENGTH_SHORT)
                                .show();
                    }
                });
            }

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

        } catch (MalformedURLException ex) {
            Toast.makeText(PhotosActivity.this, "MalformedURLException",
                    Toast.LENGTH_SHORT).show();
            Log.e("Upload file to server", "error: " + ex.getMessage(), ex);
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(PhotosActivity.this,
                    "Exception : " + e.getMessage(), Toast.LENGTH_SHORT).show();
            Log.e("Upload file to server Exception",
                    "Exception : " + e.getMessage(), e);
        }
        return serverResponseCode;
    }

    // UPDATED!
    public String getPath(Uri uri) {
        String[] projection = { MediaColumns.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
        cursor.moveToFirst();
        imagePath = cursor.getString(column_index);

        return cursor.getString(column_index);
    }
}

and in php

$target_path1 = "upload/";

$target_path1 = $target_path1 . basename( $_FILES['uploaded_file']['name']);
move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $target_path1)

Hope that helps

 # handling in Asp.Net MVC #

 public string Post( string PostText, byte[] image)
      {
        PostCS PostCs = new PostCS();
        ImageResize obj = new ImageResize();
        string FileName = DateTime.Now.ToFileTime().ToString().Trim();
        string imgName;        

        if (image != null)
        {
            ImageFormat png = ImageFormat.Png;
            using (System.IO.MemoryStream ms = new System.IO.MemoryStream(image))
            {
                System.Drawing.Image bp = System.Drawing.Image.FromStream(ms, true);
                //Bitmap bp = new Bitmap(Image.FromStream(ms));
                imgName = FileName + "_" + bp.Width + "X" + bp.Height + ".png";
                bp.Save(Server.MapPath(ConfigurationManager.AppSettings["WallPostImages"].ToString()) + imgName, png);
                PostCs.ImageName = imgName;                   
                PostCs.InsertPostImg(PostCs);


            }
            var resizemaster = from a in LQdb.Z_ImageSetups select a;
            int wallwidth = 640;
            int wallheight = 480;             

            string orginalfilename = Server.MapPath(ConfigurationManager.AppSettings["WallPostImages"].ToString()) + imgName;
            obj.ImageStream(FileName, ConfigurationManager.AppSettings["WallPostImages"].ToString(), wallwidth, wallheight, orginalfilename, out imgName);
            PostCs.ImageName = imgName;
            PostCs.ImageType = "Wall";
            PostCs.InsertPostImg(PostCs);


        }
        return PostText;
    }
public class AddPost extends ActionBarActivity {
protected ImageButton imgButton;// To refer image button
protected ImageView image;

// To refer image view
protected ImageButton ImageFromCard;
private static int RESULT_LOAD_IMAGE = 2;

private ProgressDialog PDialog;
Button btnLogout;
@SuppressWarnings("unused")
private boolean imgCapFlag = false;
protected boolean taken;
protected static final String PHOTO_TAKEN = "photo_taken";
protected String path;
private Bitmap bitmap;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_post);

    image = (ImageView) findViewById(R.id.image);

    imgButton = (ImageButton) findViewById(R.id.imageButton1);
    imgButton.setOnClickListener(new ButtonClickHandler());
    ImageFromCard = (ImageButton) findViewById(R.id.imageButton2);

    path = Environment.getExternalStorageDirectory()
            + "/images/make_machine_example.jpg";

    // ---------------------MEMORY CARD OPEN----------------------------

    ImageFromCard.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            Intent i = new Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(i, RESULT_LOAD_IMAGE);
        }
    });

    // ------------------URL FOR CATEGORIES--------------------

}

public void seepost(View view) {
    Intent i = new Intent(view.getContext(), MainActivity.class);
    startActivity(i);
}

// ---------Handling Image Result---------------------

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK
            && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();

        BitmapFactory.Options options = new BitmapFactory.Options();
        bitmap = BitmapFactory.decodeFile(picturePath);
        // Set ImageView with the bitmap read in the prev line
        image.setImageBitmap(bitmap);

    } else {

        // Log message
        Log.i("SonaSys", "resultCode: " + resultCode);
        switch (resultCode) {
        // When user doesn't capture image, resultcode returns 0
        case 0:
            Log.i("SonaSys", "User cancelled");
            break;
        // When user captures image, onPhotoTaken an user-defined method to
        // assign the capture image to ImageView
        case -1:
            onPhotoTaken();
            break;

        }

    }

}

// ----------------------------------------------------

public class ButtonClickHandler implements View.OnClickListener {
    public void onClick(View view) {
        // Below log message will be logged when you click Take photo button
        Log.i("SonaSys", "ButtonClickHandler.onClick()");
        // Call startCameraActivity, an user defined method, going to be
        // created
        startCameraActivity();
    }
}

protected void startCameraActivity() {
    // Log message
    Log.i("SonaSys", "startCameraActivity()");
    // Create new file with name mentioned in the path variable
    File file = new File(path);

    Uri outputFileUri = Uri.fromFile(file);
    Intent intent = new Intent(
            android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

    startActivityForResult(intent, 0);
}

protected void onPhotoTaken() {
    // Log message
    Log.i("SonaSys", "onPhotoTaken");
    // Flag used by Activity life cycle methods
    taken = true;
    // Flag used to check whether image captured or not
    imgCapFlag = true;
    // BitmapFactory- Create an object
    BitmapFactory.Options options = new BitmapFactory.Options();
    // Set image size
    options.inSampleSize = 4;
    // Read bitmap from the path where captured image is stored
    bitmap = BitmapFactory.decodeFile(path, options);
    // Set ImageView with the bitmap read in the prev line
    image.setImageBitmap(bitmap);

}

// ----------------Image Upload ------------------------------

public void postData(View view) {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(
            "http://sitename.net/controllername/post");

    try {

        if (bitmap != null) {

            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            bitmap.compress(CompressFormat.JPEG, 100, bos);
            byte[] data = bos.toByteArray();
            String file = Base64.encodeBytes(data);

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                    7);

            nameValuePairs.add(new BasicNameValuePair("image", file));

            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            httpclient.execute(httppost);

        }

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!