Base64编码的xls/xlsx文件解码后POI无法识别,如何正确解码无报错?
问题根因
- 错误出在多余的字符串转码步骤:.xls/.xlsx属于二进制格式文件,并非UTF-8编码的纯文本文件。Base64解码后得到的字节数组本身就是完整的Excel原始二进制数据,你额外执行
new String(解码字节, UTF_8).getBytes(UTF_8)的操作会不可逆地破坏二进制字节结构,导致POI工具无法识别该流为合法的Excel文件流。
修正方案
直接将Base64解码得到的字节数组封装为输入流即可,删除多余的转码步骤,替换原有InputStream fileContent = ...行的代码:
// 正确解码逻辑 byte[] rawExcelBytes = Base64.getDecoder().decode(fileContentEncoded); InputStream fileContent = new ByteArrayInputStream(rawExcelBytes);
额外校验项
如果修改后仍有报错,可以排查以下两点:
- 确认拆分得到的
fileContentEncoded是纯Base64内容,没有残留data:application/vnd.ms-excel;base64,这类HTTP数据URI前缀,你当前按分隔符拆分取最后一段的逻辑要确保前缀清理干净。 - 确认上传端的Base64编码规则和后端解码规则一致,避免出现URL安全编码、自动插入换行符这类不兼容的情况。
内容的提问来源于stack exchange,提问作者michaelpnrs
相关产品推荐
相关产品推荐

