您的位置:首页 > 移动开发 > Android开发

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

2015-11-28 15:01 573 查看
这个是大部分的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下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: