Android拍照或图库选择照片上传(附服务器端代码)

来源:互联网 发布:linux下docker安装部署 编辑:程序博客网 时间:2024/05/16 08:42

这个是大部分的app都有的功能,之前是用的同事的工具类,没自己写过,今天正好有空,就写在博客中方便以后查看

需要用到的系统权限,1是摄像头权限 2读写sd卡的权限3.网络权限

    <uses-permission android:name="android.permission.CAMERA"></uses-permission>    <uses-permission android:name="android.permission.INTERNET"></uses-permission>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

打开摄像头

 Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                startActivityForResult(camera, XIANGJI);

Override一下onActivityResult

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        }

思路就是通过Bundle返回的bitmap,把bitmap写入到sd卡里面,返回一个sd卡的路径

/**     * 根据Bundle获取图片在sd卡的路径     * @param bundle     * @return     */    private String getCameraImage(Bundle bundle) {        String strState = Environment.getExternalStorageState();        if (!strState.equals(Environment.MEDIA_MOUNTED)) {            Log.i("TAG", "SD卡不存在");        }        String fileName = "chenxin.jpg"; //此处可以改为时间        // Bundle bundle = data.getExtras();        Bitmap bitmap = (Bitmap) bundle.get("data");        File file = new File("/sdcard/tu/");        if (!file.exists()) {            file.mkdirs();        }        fileName = "/sdcard/tu/" + fileName;        FileOutputStream stream = null;        try {            stream = new FileOutputStream(fileName);            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);        } catch (FileNotFoundException e) {            e.printStackTrace();        } finally {            try {                if (stream != null) {                    stream.flush();                    stream.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }        return fileName;    }

调用系统图库

Intent picture = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);                startActivityForResult(picture, TUKU);**把Bundle的getdata返回的URI转换成file的那种URi**```
/** * 获取系统图库图片的SD卡路径 * * @param data * @return */private String getPhoneImage(String uriString) {    Uri selectedImage = Uri.parse(uriString);    String[] filePathColumns = {MediaStore.Images.Media.DATA};    Cursor cursor = this.getContentResolver().query(selectedImage, filePathColumns, null, null, null);    cursor.moveToFirst();    int columnIndex = cursor.getColumnIndex(filePathColumns[0]);    String fileName = cursor.getString(columnIndex);    cursor.close();    return fileName;}
**然后使用Xutils的post上传图片到服务器**

//使用Xutils上传图

HttpUtils httpUtils = new HttpUtils();        RequestParams params = new RequestParams();        params.addBodyParameter("File",new File(filePath));        httpUtils.send(HttpRequest.HttpMethod.POST,"http://192.168.0.109:5421/api/upload/Uploadimg", params, new RequestCallBack<String>() {            @Override            public void onSuccess(ResponseInfo<String> responseInfo) {                Log.e("返回值",responseInfo.result);            }            @Override            public void onFailure(HttpException e, String s) {                Log.e("失败:",e.getMessage());            }        });

服务器使用的是ASP.Net MVC webapi

 public class UploadController : ApiController    {        public string Uploadimg()        {            HttpPostedFile file = HttpContext.Current.Request.Files[0];            string strPath = @"D:\WWW\test2.png"; //此处路径可以自由配置            file.SaveAs(strPath);            string result = "成功";            return result;        }    }

Demo下载

0 0
原创粉丝点击