安卓如何从相册上传图片到服务器

11

我正在尝试从Android的照片库上传图像到服务器。我之前所有的通信都是使用对象流完成的,但现在我不确定该如何做。哦,我已经使用输入流下载了一张图片,在这种情况下你可以直接使用URL指向该图片。如果有人能指点我正确的方向,将不胜感激。

谢谢您


这个问题并不是太宽泛,关闭这个问题是一个非常大的错误。 - Mohsen Kamrani
2个回答

13

要从应用程序向服务器上传图像,你可以根据以下教程操作:

  1. 使用POST在Android上将文件上传到HTTP服务器。

  2. 使用HTTP POST多部分上传图像或文件。

以上两个URL将为您解释如何从应用程序上传图像到服务器。

要从您的照片库中上传图像,您需要获取该图像文件的路径,并在第一个URL中将获取的路径替换为/data/file_to_send.mp3

要获取来自移动相册的图像路径,您可以使用以下代码:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        b1 = (Button)findViewById(R.id.Button01);

        b1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                openGallery(SELECT_FILE1);
            }
        });
    }

    public void openGallery(int req_code) {

        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent,
                               "Select file to upload "), req_code);
    }

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

        if (resultCode == RESULT_OK) {
            Uri selectedImageUri = data.getData();

            if (requestCode == SELECT_FILE1) {
                selectedPath1 = getPath(selectedImageUri);
                System.out.println("selectedPath1 : " + selectedPath1);
            }

            if (requestCode == SELECT_FILE2) {
                selectedPath2 = getPath(selectedImageUri);
                System.out.println("selectedPath2 : " + selectedPath2);
            }

            tv.setText("Selected File paths : " + selectedPath1 + "," + selectedPath2);
        }
    }

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

你可以使用以下代码下载图片。

    ImageView image = (ImageView)findViewById(R.id.image);
    if(!ImageUrl.equals("no image")) {          
        try {
            image.setImageDrawable(grabImageFromUrl(ImageUrl));

        } catch(Exception e) {     
          }  
    } 

    private Drawable grabImageFromUrl(String url) throws Exception {
          return Drawable.createFromStream((InputStream)new URL(url).getContent(), "src");
    }

2
请注意,在三星设备上,data.getData(); 将无法正常工作。请使用预先插入的 Uri。 - Droidman
至少它在最新的设备上能够工作! - Adnan Mulla
1
@AdnanMulla 谢谢您确认,但我需要告诉您,在我发表这个评论时,我已经在所有设备上进行了测试,然后才在这里发表了我的评论...所以如果它真的对您有帮助,请点赞,这样也可以帮助其他人。 - Parth Dani

0

我也遇到了同样的问题。

Bitmap image = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);

对我有用


如果您想上传文件(图像),只需使用 new File(URI) - blackdog
1
@blackdog 不适用于图库图像。返回 null。 - Zaartha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接