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
原创粉丝点击