Android中头像上传的另类方法——字符串上传

1、头像上传

        头像上传功能,一般我们会使用文件的输入输出流上传。但是在Android开发中,如果我们的某一个应用,不会经常使用到文件上传这样的功能,写很多与文件上传和下载有关的代码,似乎有些不太划算,那么,我们可不可以将文件转换为字符串,然后再进行上传呢?答案是可以的,笔者将这种方法使用在了本人的项目中,非常成功,减轻了大量的代码工作量,简化了逻辑。


2、背景说明

       在开始提出这个需求的时候,笔者本身也是想着使用文件的上传功能,不过在项目中使用了Volley这个框架,它本身并不支持文件的上传,这就很坑爹了。Volley官方的文档中说,不推荐使用volley上传较大的数据。那么,笔者就在想,一个头像应该算不上什么大的文件了吧?于是,这样的一个想法就出来了:将文件转换为字符串,然后作为参数进行上传。


3、保存图片

       这里有一个保存图片的方法,如下:

    /**
     * 保存图片
     * @param bitmap
     * @throws IOException
     */
    public static void saveBitmap(Bitmap bitmap) throws IOException{
        mImageFile = new File(Environment.getExternalStorageDirectory() + "/temp.png");
        FileOutputStream out;
        try{
            out = new FileOutputStream(mImageFile);
            if(bitmap.compress(Bitmap.CompressFormat.PNG, 70, out)){
                out.flush();
                out.close();
            }
        } catch (FileNotFoundException e){
            e.printStackTrace();
        } catch (IOException e){
            e.printStackTrace();
        }
    }


4、转换图片

        我们的目的是将图片转换为字符串,代码如下:

    /**
     * 图片文件转换为指定编码的字符串
     *
     * @param imgFile  图片文件
     */
    public static String file2String(File imgFile) {
        InputStream in = null;
        byte[] data = null;
        //读取图片字节数组
        try{
            in = new FileInputStream(imgFile);
            data = new byte[in.available()];
            in.read(data);
            in.close();
        } catch (IOException e){
            e.printStackTrace();
        }
        //对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        String result = encoder.encode(data);
        return result;//返回Base64编码过的字节数组字符串
    }

5、头像上传

       这里就不提供详细的代码了,上面的代码已经是从笔者真实的项目中抽出的。这里仅仅提供一个思路吧,可以将上面的字符串,当作参数与其它字符串拼接在一起,作为参数传递给服务器,然后又服务器解析,再进行转换就可以得到真实的图片数据,转换为图片数据。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值