从gallary或相机android上传图像到服务器 [英] Upload image to server from gallary or camera android

查看:117
本文介绍了从gallary或相机android上传图像到服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个从gallary或相机到服务器上传图片的活动。从相机上传图像很好,但没有从gallary上传。我有一个错误显示

i have a Activity for Upload image from gallary or camera to server.image upload from camera is fine but upload from gallary is not done.i have a error showing

BitmapFactory﹕ Unable to decode stream: FileNotFoundException

我想要当我从gallary中获取图像时,它会显示在图像视图上的其他活动中。
i不知道如何获得galuri文件,请帮助我。

i want to do when i pick up the image from gallary it is shown in other Activity on image view. i don't know how to get fileuri for gallary please help me.

我的代码:

 loadimage = (ImageView) findViewById(R.id.profilpic);
    loadimage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {


         /*   Intent i = new Intent(Tab1.this, ImageMain.class);
            startActivity(i);*/
            //    selectImageFromGallery();

           AlertDialog.Builder builder = new AlertDialog.Builder(Tab1.this);
            builder.setMessage("Select Image From")
                    .setCancelable(true)
                    .setPositiveButton("camera", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                            fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

                            intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

                            // start the image capture Intent
                            startActivityForResult(intent, CAMERA_REQUEST);
                        }
                    })
                    .setNegativeButton("gallary", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {

                            Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

                            startActivityForResult(intent, RESULT_LOAD_IMAGE);


                        }

                    });
            AlertDialog alert = builder.create();
            alert.show();



        }
    });

听到我的onActiivityResult

Hear is my onActiivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // if the result is capturing Image
    if (requestCode == CAMERA_REQUEST) {
        if (resultCode == RESULT_OK) {

            launchUploadActivity(true);

        } else if (resultCode == RESULT_CANCELED) {

            // user cancelled Image capture
            Toast.makeText(getApplicationContext(),
                    "User cancelled image capture", Toast.LENGTH_SHORT)
                    .show();

        } else {
            // failed to capture image
            Toast.makeText(getApplicationContext(),
                    "Sorry! Failed to capture image", Toast.LENGTH_SHORT)
                    .show();
        }

    }
    else if(requestCode==RESULT_LOAD_IMAGE){

        if (resultCode==RESULT_OK){


          launchUploadActivity(true);
        }
    }
}



private void launchUploadActivity(boolean isImage){

    Intent i = new Intent(Tab1.this,UploadAvtivity.class);
    i.putExtra("filePath", fileUri.getPath());
    i.putExtra("isImage", isImage);
    startActivity(i);


}


推荐答案

这是通过默认相机拍摄照片的代码片段(这里我实现了Intent来获取图像)。之后将其存储到SD卡(这里将创建一个新文件并存储新拍摄的图像);如果您不想存储,则从代码中删除保存部分。之后,您可以使用文件路径进行上传。然后你可以引用它并改变以获得你想要的路径。

Here is the Code piece for Taking a Picture through Default Camera (here I implemented Intent to to fetch the image). After that store it to SD card(here a new file will be created and the newly taken image will be stored ); and if you don't want to store then remove the saving part from code. After that you can use the file path for your upload purpose. You can then refer it and change to get the path as your wish.

在课程区域放这些行

final int TAKE_PHOTO_REQ = 100;
String file_path = Environment.getExternalStorageDirectory()
            + "/recent.jpg";//Here recent.jpg is your image name which will going to take

之后通过将这些行放入调用方法来调用相机。

After that invoke the camera by putting these line in calling method.

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PHOTO_REQ);

然后在您的Activity中添加此方法以获取图片并将其保存到SD卡并且您可以调用你的上传方法从这里通过了解它的路径来上传图片。

then add this method in your Activity to get the picture and save it to sd card and you can invoke your upload method from here to upload the image by knowing its path.

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
        case TAKE_PHOTO_REQ: {
            if (resultCode == TakePicture.RESULT_OK && data != null) {

                Bitmap srcBmp = (Bitmap) data.getExtras().get("data");

                // ... (process image  if necesary)

                imageView.setImageBitmap(srcBmp);
                ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                srcBmp.compress(Bitmap.CompressFormat.JPEG, 40, bytes);

                // you can create a new file name "test.jpg" in sdcard folder.
                File f = new File(file_path);
                try {
                    f.createNewFile();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                // write the bytes in file
                FileOutputStream fo = null;
                try {
                    fo = new FileOutputStream(f);
                } catch (FileNotFoundException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                try {
                    fo.write(bytes.toByteArray());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                // remember close de FileOutput
                try {
                    fo.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Log.e("take-img", "Image Saved to sd card...");
                // Toast.makeText(getApplicationContext(),
                // "Image Saved to sd card...", Toast.LENGTH_SHORT).show();
                break;
            }
        }
        }
    }

希望这对你和其他人也有帮助..谢谢

Hope this will be helpful for you and others too .. thanks

这篇关于从gallary或相机android上传图像到服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆