个人头像上传

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            switch (requestCode){
                case REQUST_CODE_ZOOM://缩放后
                    if(data==null){
                        return;
                    }
                    Bundle extras = data.getExtras();
                    Bitmap bm = extras.getParcelable("data");
                    imgHead.setImageBitmap(bm);  //测试用
                    //上传
                    try {
                        uploadByAsyncClient(WebApiConfig.URL_UPLOAD_HEAD,bm);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }


                    break;
                case REQUST_CODE_IMG:
                    if(data==null){
                        return;
                    }
                    Uri uri = data.getData();
                    Uri fileUri = converUri(uri);
                    startImageZoom(fileUri);





//                    else{
//                        Uri uri = data.getData();
//                        Uri fileUri = converUri(uri);
//                        Log.d("car","Uri"+uri+"fileUri"+fileUri);
//                        String[] proj = {MediaStore.Images.Media.DATA};
//
//                        //好像是Android多媒体数据库的封装接口,具体的看Android文档
//                        Cursor cursor = managedQuery(fileUri, proj, null, null, null);
//                        //按我个人理解 这个是获得用户选择的图片的索引值
//                        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
//                        //将光标移至开头 ,这个很重要,不小心很容易引起越界
//                        cursor.moveToFirst();
//                        //最后根据索引值获取图片路径
//                        String path = cursor.getString(column_index);
//                        try {
//                            uploadByAsyncClient(WebApiConfig.URL_UPLOAD_HEAD,path);
//                        } catch (FileNotFoundException e) {
//                            e.printStackTrace();
//                            Log.d("car","error:"+e.toString());
//                        }
//                    }



                    break;
            }

        }

    }
/**
     * 保存图像到SD卡中
     * @param bm
     * @return
     */
    private Uri saveBitmap(Bitmap bm){
        File tmpDir = new File(Environment.getExternalStorageDirectory()+"/com.imgHead.header");
        if(!tmpDir.exists()){
            tmpDir.mkdir();
        }
        File img = new File(tmpDir.getAbsolutePath()+"/header.png");
        try {
            FileOutputStream fos = new FileOutputStream(img);
            bm.compress(Bitmap.CompressFormat.PNG, 85, fos);//压缩格式,图片质量,文件的输出流
            fos.flush();
            fos.close();
            return Uri.fromFile(img);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }


    }

    /**
     * 将content类型转为file类型的uri
     * @param uri
     * @return
     */

    private Uri converUri(Uri uri){
        InputStream is = null;
        try {
            is = getContentResolver().openInputStream(uri);
            Bitmap bitmap = BitmapFactory.decodeStream(is);
            is.close();
            return saveBitmap(bitmap);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

    }
    /**
     * 图像裁剪
     */
    private void startImageZoom(Uri uri){
        Intent intentzoom = new Intent("com.android.camera.action.CROP");
        intentzoom.setDataAndType(uri, "image/*");
        intentzoom.putExtra("crop", "true");
        intentzoom.putExtra("aspectX", 1);
        intentzoom.putExtra("aspectY", 1);
        intentzoom.putExtra("outputX",150);
        intentzoom.putExtra("return-data",true);
        startActivityForResult(intentzoom,REQUST_CODE_ZOOM);
    }


    /**
     * 由AsyncHttpClient框架上传
     */
    private void uploadByAsyncClient(String url,Bitmap bm) throws FileNotFoundException{
            showLoadingDialog(mContext);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, 60, stream);
        byte[] bytes = stream.toByteArray();
        String img = new String(com.loopj.android.http.Base64.encodeToString(bytes, com.loopj.android.http.Base64.DEFAULT));
        RequestParams params = new RequestParams();
        params.put("image", img);
//        params.put("image", "子图");

        client.post(url, params, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                dialog.cancel();

                Log.d("car","转码:"+ Base64.encodeToString(responseBody, Base64.DEFAULT));
                //读取数据流
                String response = writeFile(responseBody);
                ToastUtils.show(mContext, "成功啦!" + response);
                try {
                    JSONObject object = new JSONObject(response);//建立response的jsonobject
                    String successCode = object.getString("success");
                    if (TextUtils.equals(successCode, "0")) {
                        String url = object.getString("url");
                        commitUserLogo(url);


                    } else {
                        ToastUtils.show(mContext, "上传图片失败!");
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                dialog.cancel();
                ToastUtils.show(mContext, "失败啦!" + responseBody.toString());

            }
        });
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值