Android 测试上传头像到服务器
来源:互联网 发布:红杏出墙软件下载 编辑:程序博客网 时间:2024/05/01 19:44
现在很多的app中都有用户注册登录以及头像修改的功能, 下面就我碰到的上传头像到服务器中做个简单的介绍。
既然要上传头像, 那么Android中图片的来源有两种方式 :通过文件管理器、通过拍照
1:文件管理器(图库)
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);intent.setType("image/*");// 选择图片类型// 在onActivityResult中处理选择结果startActivityForResult(intent, PICTURE_REQUEST_CODE);
2:拍照
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 请求拍照的Action// 在onActivityResult中处理拍照结果startActivityForResult(intent, CAMERA_REQUEST_CODE);
通过Intent来请求图片资源, 那么请求到的图片资源怎么去获取呢?此时就可以通过Activity中的 onActivityResult方法来对图片进行处理
protected void onActivityResult(int requestCode, int resultCode, Intent data){super.onActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK && data != null){Uri uri = data.getData();Bitmap bitmap = null;if (null != uri){String imgPath = null;ContentResolver resolver = this.getContentResolver();String[] columns = { MediaStore.Images.Media.DATA };Cursor cursor = null;cursor = resolver.query(uri, columns, null, null, null);if (Build.VERSION.SDK_INT > 18)// 4.4以后文件选择发生变化,判断处理{// http://blog.csdn.net/tempersitu/article/details/20557383if (requestCode == PICTURE_REQUEST_CODE)// 选择图片{imgPath = uri.getPath();if (!TextUtils.isEmpty(imgPath)&& imgPath.contains(":")){String imgIndex = imgPath.split(":")[1];cursor = resolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,columns, "_id=?", new String[] { imgIndex },null);}}}if (null != cursor && cursor.moveToFirst()){int columnIndex = cursor.getColumnIndex(columns[0]);imgPath = cursor.getString(columnIndex);cursor.close();}if (!TextUtils.isEmpty(imgPath)){bitmap = genBitmap(imgPath);}}else if (requestCode == CAMERA_REQUEST_CODE)// 拍照{// 拍照时,注意小米手机不会保存图片到本地,只可以从intent中取出bitmap, 要特殊处理Object object = data.getExtras().get("data");if (null != object && object instanceof Bitmap){bitmap = (Bitmap) object;}}if (null != bitmap){upload(bitmap);}}}对选择的图片进行处理后再上传
/**上传图片到服务器*/private void upload(final Bitmap bitmap){new AsyncTask<Bitmap, Void, String>(){ProgressDialog progressDialog;protected void onPreExecute(){progressDialog = new ProgressDialog(MainActivity.this);progressDialog.setCanceledOnTouchOutside(false);progressDialog.setMessage("正在和服务器通信中……");progressDialog.show();};@Overrideprotected String doInBackground(Bitmap... params){try{//此处没有判断是否有sd卡File dirFile = new File("/mnt/sdcard/android/cache");if(!dirFile.exists()){dirFile.mkdirs();}File file = new File(dirFile, "photo.png");if (params[0].compress(CompressFormat.PNG, 50,new FileOutputStream(file))){System.out.println("保存图片成功");HttpClient client = new DefaultHttpClient();HttpPost httpPost = new HttpPost(UPLOAD_URL);MultipartEntity entity = new MultipartEntity();// 通过RSA加密后的用户名String miUserName = "GuKDdJVZXBpjrX3JmumCDkgIzjlGcEfpy9ty+Gpwt5fNDopuM1KqNMTmMy0eflplRoJFj8A0tw4e66ib+wfPB7YXxSk836s+yk7MvrmF289u5o2nBzb+roEGZhEjlmCGheXgC4EBWcHqR2Sp+lVzQLE/yELJE9uXG1YKQuYqvpY=";entity.addPart("acc", new StringBody(miUserName));entity.addPart("ext", new StringBody("png"));entity.addPart("img", new FileBody(file));httpPost.setEntity(entity);HttpResponse response = client.execute(httpPost);if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){InputStream in = response.getEntity().getContent();byte[] buffer = new byte[1024];int len = 0;StringBuffer stringBuffer = new StringBuffer();while ((len = in.read(buffer)) != -1){stringBuffer.append(new String(buffer, 0, len,"utf-8"));}System.out.println("stringBuffer = "+ stringBuffer.toString().trim());file.delete();//删除文件return stringBuffer.toString().trim();}}}catch (Exception e){e.printStackTrace();}return null;}protected void onPostExecute(String result){progressDialog.dismiss();if (!TextUtils.isEmpty(result)){try{JSONObject jsonObject = new JSONObject(result);if (null != jsonObject&& "1".equals(jsonObject.opt("result"))){// 上传成功mIvImageView.setImageBitmap(bitmap);Toast.makeText(MainActivity.this, "上传成功",Toast.LENGTH_SHORT).show();}}catch (JSONException e){e.printStackTrace();}}else{Toast.makeText(MainActivity.this, "上传失败",Toast.LENGTH_SHORT).show();}};}.execute(bitmap);}/**通过给定的图片路径生成对应的bitmap*/private Bitmap genBitmap(String imgPath){BitmapFactory.Options options = new Options();options.inJustDecodeBounds = true;BitmapFactory.decodeFile(imgPath, options);int imageWidth = options.outWidth;int imageHeight = options.outHeight;int widthSample = (int) (imageWidth / mWH);int heightSample = (int) (imageHeight / mWH);// 计算缩放比例options.inSampleSize = widthSample < heightSample ? heightSample: widthSample;options.inJustDecodeBounds = false;return BitmapFactory.decodeFile(imgPath, options);}最后注意要在AndroidManifest.xml中加入相应的权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
上面代码中用的一些变量
private static final String UPLOAD_URL = "http://comments.roboo.com/photoUpload";private static final int CAMERA_REQUEST_CODE = 222;private static final int PICTURE_REQUEST_CODE = 444;/**上传图片的宽度和高度*/private int mWH = 90;// 单位dpprivate ImageView mIvImageView;private Button mBtnCamera;private Button mBtnPicture;
下载地址:http://download.csdn.net/detail/u012612952/8298037
1 0
- Android 测试上传头像到服务器
- Android 上传头像(文件)到服务器
- Android裁剪头像上传到远程服务器
- // 上传头像到服务器
- 上传头像到服务器
- Android头像的选择并上传到阿里云服务器
- iOS上传图片或者头像到服务器。
- iOS开发:上传头像到服务器
- 关于上传头像到服务器的问题
- 调用系统相册上传头像到服务器
- 修改用户头像,上传到服务器
- Android实现从手机相册上传头像以及拍照上传到服务器
- Swift 头像上传(4)Alamofire上传图片到服务器
- Android 开发 上传用户头像到服务器的数据库再获取显示
- android 头像利用okhttp上传到服务器部分----萌新成长之路
- Android 开发 上传用户头像到服务器的数据库再获取显示
- phonegap+JQM拍照并上传头像到服务器
- android中的制作圆形头像并且上传服务器
- 数据安全
- Hibernate-Search使用
- 给KVM虚拟机增加硬盘
- IOS——NSDate昨天、今天、明天
- 剑指offer 面试题27 二叉搜索树转换为排序双向链表
- Android 测试上传头像到服务器
- AfxGetApp()和GetSafeHwnd()
- 数据挖掘分类技术
- HDU 5055 Bob and math problem 数学题
- .DLL、.LIB、.H文
- 页面布局技巧&&js相关知识点&&乱七八糟
- ubuntu 14.10 mysql-workbench result grid 不显示的解决办法
- 一些数据可视化的站点总结
- 可参考的技术博客