用户头像上传到服务器

13 篇文章 0 订阅

每个应用都有这样的功能,在我的界面,需要修改用户头像(拍照,选择本地),将图片上传到服务器.

  • 这就涉及到了好几个问题:
  • 1.现在市面上好多手机已经是7.0系统,这里我们就要注意一些兼容处理,6.0动态权限,7.0文件安全
  • 2.图片的上传,这里我使用okhttp

1.最好用的拍照Utils

  • 这里我只粘贴操作的代码,具体的utils类大家可以去copy,后面我会说到
  • 这里我还用到了ios风格的底部选择框
  • 这里写图片描述
 CropImageUtils.getInstance().openAlbum(this); //打开相册
 CropImageUtils.getInstance().takePhoto(this); //拍照
 @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        CropImageUtils.getInstance().onActivityResult(mContext, requestCode, resultCode, data, new CropImageUtils.OnResultListener() {
            @Override
            public void takePhotoFinish(String path) {
                //拍照回调,去裁剪
                CropImageUtils.getInstance().cropPicture(mContext, path);
            }

            @Override
            public void selectPictureFinish(String path) {
                //相册回调,去裁剪
                CropImageUtils.getInstance().cropPicture(mContext, path);
            }

            @Override
            public void cropPictureFinish(String path) {
                LogUtils.d("path", path + " .....");
                //TODO 上传图片
                SpUtil.putString(mContext, GlobalVariables.USER_ICON_FILE_PATH, path);

                //                upload(path);
            }

        });
    }
/**
     * 上传图片到服务器
     *
     * @param path
     */
    private void upload(String path) {
        HashMap<String, Object> paramsMap = getMapParams(path);
        //TODO 1. 请求路径url
        String request_url = "";
        MultipartBody.Builder builder = new MultipartBody.Builder();
        //设置类型(表单上传)
        builder.setType(MultipartBody.FORM);
        //追加参数
        for (String key : paramsMap.keySet()) {
            Object object = paramsMap.get(key);
            if (!(object instanceof File)) {
                builder.addFormDataPart(key, object.toString());
            } else {
                File file = (File) object;
                builder.addFormDataPart(key, file.getName(), RequestBody.create(null, file));
            }
        }
        //创建RequestBody
        RequestBody body = builder.build();
        //创建Request
        final Request request = new Request.Builder().url(request_url).post(body).build();
        //单独设置参数 比如读取超时时间
        Call call = new OkHttpClient().newBuilder().writeTimeout(50, TimeUnit.SECONDS).build().newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                LogUtils.d("json", "上传失败");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    String string = response.body().string();
                    LogUtils.d("json", "上传图片成功: " + string);
                } else {
                    LogUtils.d("json", "上传失败");
                }
            }
        });
    }
    //TODO 2. 添加参数
    private HashMap<String, Object> getMapParams(String path) {
        HashMap<String, Object> params = new HashMap<>();
        //todo 这里根据接口自己改变参数
        //        params.put("uid", uid);
        //        params.put("pwd", Encrypt.getMD5Str(pwd));
        //        params.put("bid", Constant.PRODUCT);
        //        params.put("cp", Constant.OS);
        //        params.put("cv", AndroidUtil.getVersionName(this));
        //        params.put("pkgname", this.getPackageName());
        //        params.put("imei", SystemUtil.getImei(this));
        //        params.put("imsi", SystemUtil.getImsi(this));
        //        params.put("netmode", SystemUtil.getNetworkName(this));
        //        params.put("ts", String.valueOf(System.currentTimeMillis() / 1000));
        File file = new File(path);
        if (file != null) {
            params.put("pic", file);
        }
        return params;
    }

2.结束

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值