2012-03-19 108 views
10

我正在尝试将图片从Android图库上传到服务器。我所做的所有沟通都是使用Object Streams,但现在我不确定我会如何做到这一点。哦,我已经使用输入流来下载图片,您可以使用URL直接指向图片。如果有人能指出我在正确的方向,将不胜感激。Android从图库到服务器上传图片

谢谢

+0

这不是太广,它已经确实一个很大的错误,关闭这个问题 – mok 2015-11-15 11:58:11

回答

13

对于上传图像从您的应用程序的服务器你可以按照以下教程:

  1. Uploading files to HTTP server using POST on Android.

  2. Upload image or file using http POST multi-part.

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

要从您的照片库中上传图片,您需要该图片文件的路径,并在第一个网址中用/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 2012-12-13 21:52:13

+0

它至少适用于最新的设备! – 2013-04-29 10:20:24

+1

@AdnanMulla谢谢......对于确认,但需要告诉你,当我发布此评论。我已经在所有设备上进行了测试,然后只有我在这里发表了我的评论...所以如果它真的帮助你,请给出一个投票,这样它也可以帮助其他 – 2013-04-29 13:52:29

0

我正面临同样的问题。

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

为我工作

+0

如果你想上传文件(图片),你只是需要'新的文件(URI)'。 – blackdog 2014-12-09 01:34:47

+1

@blackdog不适用于图库图像。返回null。 – Zartha 2016-06-07 08:16:48