使用HttpURLConnection上传图片时上传后体积远大于原文件问题求助
核心问题
上传后图片体积异常变大的直接原因是代码重复写入了两次图片二进制数据:
- 你先通过
BufferedInputStream循环读取压缩后的位图字节数组ba1的全部内容,逐块写入了请求流 - 循环结束后又额外执行了
request.write(ba1),把整个图片字节数组又完整写入了一次,相当于提交了两份图片数据,再加上multipart表单的额外开销,最终体积就接近原压缩后数据的两倍,和你遇到的4.19MB结果完全吻合。
修复方法
直接删除冗余的request.write(ba1);这一行代码即可,其余上传逻辑不需要调整。
可选优化建议
- 格式适配:你的原文件是PNG格式,当前代码强制转成了JPEG 100质量压缩,简单色彩的PNG转JPEG 100本身就可能出现体积变大的情况,如果需要保留PNG格式,可以把压缩参数改成
Bitmap.CompressFormat.PNG。 - 压缩质量调整:如果对图片精度要求不高,可以把JPEG压缩值调整到80-90,肉眼几乎看不出画质差异,但体积会明显缩小。
- 内存优化:上传大尺寸图片时,建议不要一次性把整张图的字节读进内存的
ByteArrayOutputStream,直接读取原图片文件流上传,可以减少OOM风险。 - API替换:
AsyncTask在Android 11及以上版本已经被官方废弃,后续可以替换为协程(Coroutine)或者WorkManager实现异步任务,兼容性和性能表现更好。
内容的提问来源于stack exchange,提问作者Bocho
相关产品推荐
相关产品推荐

