【问题标题】:How To Upload Image From Device To Server & How To Show On A Progress Bar How Much Data Has Been Uploaded?如何将图像从设备上传到服务器以及如何在进度条上显示已上传了多少数据?
【发布时间】:2011-12-21 19:58:17
【问题描述】:

在我的应用程序中,我想做类似的事情,当用户点击一个按钮时,它会启动设备摄像头,当用户捕获图像时,它应该被上传到服务器。现在,上传图片时,我想在进度条上显示上传进度。所以问题是这样的,我如何将图像上传到服务器,以便我可以在 xml 文件中声明的进度条上显示上传进度?现在,我需要一些关于如何完成任务的想法/示例/示例代码。

【问题讨论】:

    标签: android image upload progress-bar


    【解决方案1】:

    如何将图像上传到服务器,以便在 xml 文件中声明的进度条上显示上传进度?

    您可以使用Android - AsyncTask

    这是一个使用 AsyncTask Android: Image upload activity 将图像上传到服务器的示例。

    【讨论】:

      【解决方案2】:

      给你..

      xml 文件(imageupload.xml)

          <?xml version="1.0" encoding="utf-8"?>
      
          <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      
              android:layout_width="fill_parent" android:layout_height="fill_parent">
      
           <ImageView android:id="@+id/ImageView" android:layout_width="wrap_content"
      
                  android:layout_height="wrap_content" android:layout_centerInParent="true" />
      
           <Button android:layout_width="wrap_content" android:id="@+id/Upload"
      
                  android:layout_height="wrap_content" android:layout_alignParentLeft="true"
      
                  android:layout_alignParentBottom="true" android:text="Upload" />
      <EditText android:id="@+id/Caption" android:layout_width="500px"
      
              android:layout_height="wrap_content" android:hint="Write caption"
      
              android:singleLine="true" android:layout_toRightOf="@id/Upload"
      
              android:layout_alignParentBottom="true" />
      
      
      
          </RelativeLayout>
      

      ImageUpload.java:

      package com.isummation.imageupload;
      
      import java.io.BufferedReader;
      import java.io.ByteArrayOutputStream;
      import java.io.InputStreamReader;
      
      import org.apache.http.HttpResponse;
      import org.apache.http.client.HttpClient;
      import org.apache.http.client.methods.HttpPost;
      import org.apache.http.entity.mime.HttpMultipartMode;
      import org.apache.http.entity.mime.MultipartEntity;
      import org.apache.http.entity.mime.content.ByteArrayBody;
      import org.apache.http.entity.mime.content.StringBody;
      import org.apache.http.impl.client.DefaultHttpClient;
      import org.apache.http.protocol.BasicHttpContext;
      import org.apache.http.protocol.HttpContext;
      import org.json.JSONObject;
      
      import android.app.Activity;
      import android.app.ProgressDialog;
      import android.content.Intent;
      import android.database.Cursor;
      import android.graphics.Bitmap;
      import android.graphics.Bitmap.CompressFormat;
      import android.graphics.BitmapFactory;
      import android.net.Uri;
      import android.os.AsyncTask;
      import android.os.Bundle;
      import android.provider.MediaStore;
      import android.util.Log;
      import android.view.KeyEvent;
      import android.view.Menu;
      import android.view.MenuInflater;
      import android.view.MenuItem;
      import android.view.View;
      import android.widget.Button;
      import android.widget.EditText;
      import android.widget.ImageView;
      import android.widget.Toast;
      
      public class ImageUpload extends Activity {
          private static final int PICK_IMAGE = 1;
          private ImageView imgView;
          private Button upload;
          private EditText caption;
          private Bitmap bitmap;
          private ProgressDialog dialog;
      
          /** Called when the activity is first created. */
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.imageupload);
      
              imgView = (ImageView) findViewById(R.id.ImageView);
              upload = (Button) findViewById(R.id.Upload);
              caption = (EditText) findViewById(R.id.Caption);
              upload.setOnClickListener(new View.OnClickListener() {
      
                  public void onClick(View v) {
                      if (bitmap == null) {
                          Toast.makeText(getApplicationContext(),
                                  "Please select image", Toast.LENGTH_SHORT).show();
                      } else {
                          dialog = ProgressDialog.show(ImageUpload.this, "Uploading",
                                  "Please wait...", true);
                          new ImageUploadTask().execute();
                      }
                  }
              });
      
          }
      
          @Override
          public boolean onCreateOptionsMenu(Menu menu) {
              MenuInflater inflater = getMenuInflater();
              inflater.inflate(R.menu.imageupload_menu, menu);
              return true;
          }
      
          @Override
          public boolean onOptionsItemSelected(MenuItem item) {
              // Handle item selection
              switch (item.getItemId()) {
              case R.id.ic_menu_gallery:
                  try {
                      Intent intent = new Intent();
                      intent.setType("image/*");
                      intent.setAction(Intent.ACTION_GET_CONTENT);
                      startActivityForResult(
                              Intent.createChooser(intent, "Select Picture"),
                              PICK_IMAGE);
                  } catch (Exception e) {
                      Toast.makeText(getApplicationContext(),
                              getString(R.string.exception_message),
                              Toast.LENGTH_LONG).show();
                      Log.e(e.getClass().getName(), e.getMessage(), e);
                  }
                  return true;
              default:
                  return super.onOptionsItemSelected(item);
              }
          }
      
          @Override
          protected void onActivityResult(int requestCode, int resultCode, Intent data) {
              switch (requestCode) {
              case PICK_IMAGE:
                  if (resultCode == Activity.RESULT_OK) {
                      Uri selectedImageUri = data.getData();
                      String filePath = null;
      
                      try {
                          // OI FILE Manager
                          String filemanagerstring = selectedImageUri.getPath();
      
                          // MEDIA GALLERY
                          String selectedImagePath = getPath(selectedImageUri);
      
                          if (selectedImagePath != null) {
                              filePath = selectedImagePath;
                          } else if (filemanagerstring != null) {
                              filePath = filemanagerstring;
                          } else {
                              Toast.makeText(getApplicationContext(), "Unknown path",
                                      Toast.LENGTH_LONG).show();
                              Log.e("Bitmap", "Unknown path");
                          }
      
                          if (filePath != null) {
                              decodeFile(filePath);
                          } else {
                              bitmap = null;
                          }
                      } catch (Exception e) {
                          Toast.makeText(getApplicationContext(), "Internal error",
                                  Toast.LENGTH_LONG).show();
                          Log.e(e.getClass().getName(), e.getMessage(), e);
                      }
                  }
                  break;
              default:
              }
          }
      
          class ImageUploadTask extends AsyncTask <Void, Void, String>{
              @Override
              protected String doInBackground(Void... unsued) {
                  try {
                      HttpClient httpClient = new DefaultHttpClient();
                      HttpContext localContext = new BasicHttpContext();
                      HttpPost httpPost = new HttpPost(
                              getString(R.string.WebServiceURL)
                                      + "/cfc/iphonewebservice.cfc?method=uploadPhoto");
      
                      MultipartEntity entity = new MultipartEntity(
                              HttpMultipartMode.BROWSER_COMPATIBLE);
      
                      ByteArrayOutputStream bos = new ByteArrayOutputStream();
                      bitmap.compress(CompressFormat.JPEG, 100, bos);
                      byte[] data = bos.toByteArray();
                      entity.addPart("photoId", new StringBody(getIntent()
                              .getStringExtra("photoId")));
                      entity.addPart("returnformat", new StringBody("json"));
                      entity.addPart("uploaded", new ByteArrayBody(data,
                              "myImage.jpg"));
                      entity.addPart("photoCaption", new StringBody(caption.getText()
                              .toString()));
                      httpPost.setEntity(entity);
                      HttpResponse response = httpClient.execute(httpPost,
                              localContext);
                      BufferedReader reader = new BufferedReader(
                              new InputStreamReader(
                                      response.getEntity().getContent(), "UTF-8"));
      
                      String sResponse = reader.readLine();
                      return sResponse;
                  } catch (Exception e) {
                      if (dialog.isShowing())
                          dialog.dismiss();
                      Toast.makeText(getApplicationContext(),
                              getString(R.string.exception_message),
                              Toast.LENGTH_LONG).show();
                      Log.e(e.getClass().getName(), e.getMessage(), e);
                      return null;
                  }
      
                  // (null);
              }
      
              @Override
              protected void onProgressUpdate(Void... unsued) {
      
              }
      
              @Override
              protected void onPostExecute(String sResponse) {
                  try {
                      if (dialog.isShowing())
                          dialog.dismiss();
      
                      if (sResponse != null) {
                          JSONObject JResponse = new JSONObject(sResponse);
                          int success = JResponse.getInt("SUCCESS");
                          String message = JResponse.getString("MESSAGE");
                          if (success == 0) {
                              Toast.makeText(getApplicationContext(), message,
                                      Toast.LENGTH_LONG).show();
                          } else {
                              Toast.makeText(getApplicationContext(),
                                      "Photo uploaded successfully",
                                      Toast.LENGTH_SHORT).show();
                              caption.setText("");
                          }
                      }
                  } catch (Exception e) {
                      Toast.makeText(getApplicationContext(),
                              getString(R.string.exception_message),
                              Toast.LENGTH_LONG).show();
                      Log.e(e.getClass().getName(), e.getMessage(), e);
                  }
              }
          }
      
          public String getPath(Uri uri) {
              String[] projection = { MediaStore.Images.Media.DATA };
              Cursor cursor = managedQuery(uri, projection, null, null, null);
              if (cursor != null) {
                  // HERE YOU WILL GET A NULLPOINTER IF CURSOR IS NULL
                  // THIS CAN BE, IF YOU USED OI FILE MANAGER FOR PICKING THE MEDIA
                  int column_index = cursor
                          .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                  cursor.moveToFirst();
                  return cursor.getString(column_index);
              } else
                  return null;
          }
      
          public void decodeFile(String filePath) {
              // Decode image size
              BitmapFactory.Options o = new BitmapFactory.Options();
              o.inJustDecodeBounds = true;
              BitmapFactory.decodeFile(filePath, o);
      
              // The new size we want to scale to
              final int REQUIRED_SIZE = 1024;
      
              // Find the correct scale value. It should be the power of 2.
              int width_tmp = o.outWidth, height_tmp = o.outHeight;
              int scale = 1;
              while (true) {
                  if (width_tmp &lt; REQUIRED_SIZE &amp;&amp; height_tmp &lt; REQUIRED_SIZE)
                      break;
                  width_tmp /= 2;
                  height_tmp /= 2;
                  scale *= 2;
              }
      
              // Decode with inSampleSize
              BitmapFactory.Options o2 = new BitmapFactory.Options();
              o2.inSampleSize = scale;
              bitmap = BitmapFactory.decodeFile(filePath, o2);
      
              imgView.setImageBitmap(bitmap);
      
          }
      }
      

      imageupload_menu.xml

      <?xml version="1.0" encoding="utf-8"?>
      <menu xmlns:android="http://schemas.android.com/apk/res/android">
          <item android:id="@+id/ic_menu_gallery" android:icon="@drawable/ic_menu_gallery"
              android:title="Gallery" />
      </menu>
      

      【讨论】:

        猜你喜欢
        • 2016-01-14
        • 2014-02-09
        • 1970-01-01
        • 1970-01-01
        • 2016-05-25
        • 2017-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多