从gallary或相机android上传图像到服务器

时间:2015-06-16 06:51:32

标签: android image image-uploading

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

package main

import (
    "fmt"
    "time"
)

func getIntSlowly() int {
    time.Sleep(time.Millisecond * 500)
    return 123
}

func funcWithChanResult() chan int {
    chanint := make(chan int)
    go func() {
        chanint <- getIntSlowly()
    }()
    return chanint
}

func funcWithNonChanResult() int {
    var result int
    result = funcWithChanResult() 
    // result <- funcWithChanResult() 
    return result
}

func main() {
    fmt.Println("Received first int:", <-funcWithChanResult())
    fmt.Println("Received second int:", funcWithNonChanResult())
}

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

我的代码:

BitmapFactory﹕ Unable to decode stream: FileNotFoundException

听到我的onActiivityResult

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



        }
    });

1 个答案:

答案 0 :(得分:1)

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

在课程区域放这些行

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

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

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

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

@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;
            }
        }
        }
    }

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