2012-03-19 39 views
10

Tôi đang cố tải lên hình ảnh từ thư viện ảnh của Android lên máy chủ. Tất cả các thông tin liên lạc tôi đã làm đã được với dòng đối tượng nhưng bây giờ tôi không chắc chắn như thế nào tôi sẽ làm điều này. Ồ và tôi đã sử dụng Luồng đầu vào để tải xuống hình ảnh nơi bạn trỏ trực tiếp đến hình ảnh bằng URL. Nếu ai đó có thể chỉ cho tôi đi đúng hướng sẽ được đánh giá cao.Hình ảnh tải lên Android từ thư viện đến máy chủ

cảm ơn

+0

Đó không phải là quá rộng và nó được thực sự là một sai lầm lớn để đóng câu hỏi này – mok

Trả lời

13

Đối tải lên hình ảnh đến một máy chủ từ ứng dụng của bạn, bạn có thể làm theo hướng dẫn sau đây:

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

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

Hai url trên sẽ giải thích cho bạn cách tải hình ảnh từ ứng dụng của bạn lên máy chủ.

Để tải hình ảnh lên từ thư viện ảnh của bạn, bạn yêu cầu đường dẫn của tệp hình ảnh đó và thay thế đường dẫn thu được bằng /data/file_to_send.mp3 trong url đầu tiên.

Để có được đường dẫn của hình ảnh từ bộ sưu tập điện thoại di động bạn có thể làm theo các đoạn mã sau:

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

để tải về hình ảnh mà bạn có thể thực hiện đoạn mã sau.

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

xin lưu ý rằng data.getData(); sẽ KHÔNG hoạt động trên các thiết bị Samsung. Sử dụng Uri được chèn sẵn thay vì – Droidman

+0

Vâng, nó hoạt động trên các thiết bị mới nhất ít nhất! –

+1

@AdnanMulla Cảm ơn ... đã xác nhận nhưng cần phải nói với bạn rằng khi tôi đã đăng nhận xét này. Tôi đã thử nghiệm trên tất cả các thiết bị và sau đó chỉ có tôi đã đặt bình luận của tôi ở đây ... Vì vậy, nếu nó thực sự giúp bạn xin vui lòng bỏ phiếu lên để nó cũng có thể giúp khác –

0

Tôi đang gặp phải vấn đề tương tự.

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

Làm việc đối với tôi

+0

Nếu bạn muốn tải lên tập tin (hình ảnh), bạn chỉ cần 'tệp mới (URI)'. – blackdog

+1

@blackdog Không dành cho hình ảnh thư viện. Trả về null. – Zartha

Các vấn đề liên quan