搜索
热搜: 活动 交友 discuz
查看: 5351|回复: 0
打印 上一主题 下一主题

Android 拍照 以及从本地选择图片 上传

[复制链接]

160

主题

165

帖子

814

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
814
跳转到指定楼层
楼主
发表于 2016-1-6 20:13:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Android 拍照以及选择本地图片上传(使用MX4没有问题,LG手机貌似不能选择本地图片,以后有时间看看),在网上找的一些资料,改写的。
  1. package com.ytint.wloaa.activity;

  2. import java.io.BufferedOutputStream;
  3. import java.io.DataOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileNotFoundException;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9. import java.io.InputStream;
  10. import java.net.HttpURLConnection;
  11. import java.net.MalformedURLException;
  12. import java.net.URL;
  13. import java.text.SimpleDateFormat;
  14. import java.util.Date;
  15. import java.util.HashMap;
  16. import java.util.Iterator;
  17. import java.util.Map;
  18. import java.util.UUID;

  19. import android.app.Activity;
  20. import android.content.ContentResolver;
  21. import android.content.Context;
  22. import android.content.Intent;
  23. import android.database.Cursor;
  24. import android.graphics.Bitmap;
  25. import android.net.Uri;
  26. import android.os.Bundle;
  27. import android.os.Environment;
  28. import android.provider.MediaStore;
  29. import android.util.Log;
  30. import android.view.Gravity;
  31. import android.view.View;
  32. import android.view.View.OnClickListener;
  33. import android.view.inputmethod.InputMethodManager;
  34. import android.widget.Button;
  35. import android.widget.EditText;
  36. import android.widget.ImageView;
  37. import android.widget.LinearLayout;
  38. import android.widget.Toast;

  39. import com.ab.activity.AbActivity;
  40. import com.ab.view.ioc.AbIocView;
  41. import com.ytint.wloaa.R;
  42. import com.ytint.wloaa.app.MyApplication;
  43. import com.ytint.wloaa.bean.URLs;

  44. /**
  45. * 本地上传和调用系统拍照
  46. * @author Administrator
  47. *
  48. */
  49. public class PhotoActivity  extends AbActivity implements OnClickListener{
  50.         private MyApplication application;
  51.         String TAG = "PhotoActivity";
  52.     private ImageView img;
  53.     private EditText img_content;
  54.     private Button nati;
  55.     private Button pai;
  56.     private Button submit;
  57.    
  58.     @AbIocView(id = R.id.photo_full)
  59.         LinearLayout photo_full;
  60.    
  61.     private static String srcPath;
  62.     private static final int TIME_OUT = 10*1000;   //超时时间
  63.     private static final String CHARSET = "utf-8"; //设置编码
  64.     private String loginKey;
  65.     @Override
  66.     protected void onCreate(Bundle savedInstanceState) {
  67.         super.onCreate(savedInstanceState);
  68.         setContentView(R.layout.aa);
  69.         application = (MyApplication) this.getApplication();
  70.         loginKey = application.getProperty("loginKey");
  71.         initView();
  72.     }

  73.     private void initView() {
  74.         img = (ImageView) findViewById(R.id.img);
  75.         nati = (Button) findViewById(R.id.natives);
  76.         pai = (Button) findViewById(R.id.pai);
  77.         submit = (Button) findViewById(R.id.submit);
  78.         img_content=(EditText)findViewById(R.id.img_content);
  79.         nati.setOnClickListener(this);
  80.         pai.setOnClickListener(this);
  81.         submit.setOnClickListener(this);
  82.         
  83.             OnClickListener keyboard_hide = new OnClickListener() {

  84.                         @Override
  85.                         public void onClick(View v) {
  86.                                 InputMethodManager imm = (InputMethodManager) PhotoActivity.this
  87.                                                 .getSystemService(Context.INPUT_METHOD_SERVICE);
  88.                                 imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
  89.                         }

  90.                 };
  91.                 photo_full.setClickable(true);
  92.                 photo_full.setOnClickListener(keyboard_hide);
  93.     }

  94.     @Override
  95.     public void onClick(View v) {
  96.         switch(v.getId()){
  97.             case R.id.natives:
  98.                 Intent local = new Intent();
  99.                 local.setType("image/*");
  100.                 local.setAction(Intent.ACTION_GET_CONTENT);
  101.                 startActivityForResult(local, 2);
  102.                 break;
  103.             case R.id.pai:
  104.                 Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  105.                 startActivityForResult(it, 1);
  106.                 break;
  107.             case R.id.submit:
  108.                     if (srcPath == null || srcPath=="") {
  109.                             showToast("文件不存在");
  110.                     }else{
  111.                             submitUploadFile();
  112.                     }
  113.                     break;
  114.         }
  115.     }

  116.     /**
  117.      * 拍照上传
  118.      */
  119.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  120.         super.onActivityResult(requestCode, resultCode, data);

  121.         if (resultCode == Activity.RESULT_OK) {
  122.             switch(requestCode) {
  123.                 case 1:
  124.                     Bundle extras = data.getExtras();
  125.                     Bitmap b = (Bitmap) extras.get("data");
  126.                     img.setImageBitmap(b);
  127.                     String name = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date());
  128.                     String fileNmae = Environment.getExternalStorageDirectory().toString()+File.separator+"dong/image/"+name+".jpg";
  129.                     srcPath = fileNmae;
  130.                     System.out.println(srcPath+"----------保存路径1");
  131.                     File myCaptureFile =new File(fileNmae);
  132.                     try {
  133.                         if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
  134.                             if(!myCaptureFile.getParentFile().exists()){
  135.                                 myCaptureFile.getParentFile().mkdirs();
  136.                             }
  137.                             BufferedOutputStream bos;
  138.                             bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
  139.                             b.compress(Bitmap.CompressFormat.JPEG, 80, bos);
  140.                             bos.flush();
  141.                             bos.close();
  142.                         }else{

  143.                             Toast toast= Toast.makeText(PhotoActivity.this, "保存失败,SD卡无效", Toast.LENGTH_SHORT);
  144.                             toast.setGravity(Gravity.CENTER, 0, 0);
  145.                             toast.show();
  146.                         }
  147.                     } catch (FileNotFoundException e) {
  148.                         e.printStackTrace();
  149.                     } catch (IOException e) {
  150.                         e.printStackTrace();
  151.                     }
  152.                     break;
  153.                 case 2:
  154.                     Uri uri = data.getData();
  155.                     img.setImageURI(uri);
  156.                     ContentResolver cr = this.getContentResolver();
  157.                     Cursor c = cr.query(uri, null, null, null, null);
  158.                     c.moveToFirst();
  159.                     //这是获取的图片保存在sdcard中的位置
  160.                     srcPath = c.getString(c.getColumnIndex("_data"));
  161.                     System.out.println(srcPath+"----------保存路径2");
  162.                     break;
  163.                 default:
  164.                     break;
  165.             };
  166.         }
  167. //            n =1;
  168.     }


  169.     private void submitUploadFile(){
  170.             final File file=new File(srcPath);
  171.             final String RequestURL=URLs.UPLOADPHOTO;
  172.             if (file == null || (!file.exists())) {
  173.                     return;
  174.             }

  175.                 Log.i(TAG, "请求的URL=" + RequestURL);
  176.                 Log.i(TAG, "请求的fileName=" + file.getName());
  177.                 final Map<String, String> params = new HashMap<String, String>();  
  178.         params.put("user_id", loginKey);  
  179.         params.put("file_type", "1");  
  180.         params.put("content", img_content.getText().toString());  
  181.         showProgressDialog();
  182.             new Thread(new Runnable() { //开启线程上传文件
  183.                     @Override
  184.                     public void run() {
  185.                             uploadFile(file, RequestURL,params);
  186.                     }
  187.             }).start();
  188.     }

  189.     /**
  190.      * android上传文件到服务器
  191.      * @param file  需要上传的文件
  192.      * @param RequestURL  请求的rul
  193.      * @return  返回响应的内容
  194.      */
  195.     private String uploadFile(File file,String RequestURL,Map<String, String> param){
  196.         String result = null;
  197.         String  BOUNDARY =  UUID.randomUUID().toString();  //边界标识   随机生成
  198.         String PREFIX = "--" , LINE_END = "\r\n";
  199.         String CONTENT_TYPE = "multipart/form-data";   //内容类型
  200.         // 显示进度框
  201. //                showProgressDialog();
  202.         try {
  203.             URL url = new URL(RequestURL);
  204.             HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  205.             conn.setReadTimeout(TIME_OUT);
  206.             conn.setConnectTimeout(TIME_OUT);
  207.             conn.setDoInput(true);  //允许输入流
  208.             conn.setDoOutput(true); //允许输出流
  209.             conn.setUseCaches(false);  //不允许使用缓存
  210.             conn.setRequestMethod("POST");  //请求方式
  211.             conn.setRequestProperty("Charset", CHARSET);  //设置编码
  212.             conn.setRequestProperty("connection", "keep-alive");
  213.             conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);
  214.             if(file!=null){
  215.                 /**
  216.                  * 当文件不为空,把文件包装并且上传
  217.                  */
  218.                 DataOutputStream dos = new DataOutputStream( conn.getOutputStream());
  219.                 StringBuffer sb = new StringBuffer();
  220.                
  221.                 String params = "";  
  222.                 if (param != null && param.size() > 0) {  
  223.                     Iterator<String> it = param.keySet().iterator();  
  224.                     while (it.hasNext()) {  
  225.                         sb = null;  
  226.                         sb = new StringBuffer();  
  227.                         String key = it.next();  
  228.                         String value = param.get(key);  
  229.                         sb.append(PREFIX).append(BOUNDARY).append(LINE_END);  
  230.                         sb.append("Content-Disposition: form-data; name=\"").append(key).append("\"").append(LINE_END).append(LINE_END);  
  231.                         sb.append(value).append(LINE_END);  
  232.                         params = sb.toString();  
  233.                         Log.i(TAG, key+"="+params+"##");  
  234.                         dos.write(params.getBytes());  
  235. //                      dos.flush();  
  236.                     }  
  237.                 }  
  238.                 sb = new StringBuffer();
  239.                 sb.append(PREFIX);
  240.                 sb.append(BOUNDARY);
  241.                 sb.append(LINE_END);
  242.                 /**
  243.                  * 这里重点注意:
  244.                  * name里面的值为服务器端需要key   只有这个key 才可以得到对应的文件
  245.                  * filename是文件的名字,包含后缀名的   比如:abc.png
  246.                  */
  247.                 sb.append("Content-Disposition: form-data; name=\"upfile\";filename=\""+file.getName()+"\""+LINE_END);
  248.                 sb.append("Content-Type: image/pjpeg; charset="+CHARSET+LINE_END);
  249.                 sb.append(LINE_END);
  250.                 dos.write(sb.toString().getBytes());
  251.                 InputStream is = new FileInputStream(file);
  252.                 byte[] bytes = new byte[1024];
  253.                 int len = 0;
  254.                 while((len=is.read(bytes))!=-1){
  255.                     dos.write(bytes, 0, len);
  256.                 }
  257.                 is.close();
  258.                 dos.write(LINE_END.getBytes());
  259.                 byte[] end_data = (PREFIX+BOUNDARY+PREFIX+LINE_END).getBytes();
  260.                 dos.write(end_data);
  261.                
  262.                 dos.flush();
  263.                 /**
  264.                  * 获取响应码  200=成功
  265.                  * 当响应成功,获取响应的流
  266.                  */

  267.                 int res = conn.getResponseCode();
  268.                 System.out.println("res========="+res);
  269.                 if(res==200){
  270.                     InputStream input =  conn.getInputStream();
  271.                     StringBuffer sb1= new StringBuffer();
  272.                     int ss ;
  273.                     while((ss=input.read())!=-1){
  274.                         sb1.append((char)ss);
  275.                     }
  276.                     result = sb1.toString();
  277. //                 // 移除进度框
  278. //                                    removeProgressDialog();
  279.                     finish();
  280.                 }
  281.                 else{
  282.                 }
  283.             }
  284.         } catch (MalformedURLException e) {
  285.             e.printStackTrace();
  286.         } catch (IOException e) {
  287.             e.printStackTrace();
  288.         }
  289.         return result;
  290.     }


  291. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|安卓论坛  

GMT+8, 2024-5-18 13:28 , Processed in 0.108515 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Design S!|ƽ̶

快速回复 返回顶部 返回列表