通过BlobInput绑定读取.xlsx文件报损坏错误,如何正确处理?
正确读取Blob存储中.xlsx文件的方案
错误根源
你当前的实现从根上就有问题:.xlsx是二进制格式文件,不是文本文件。你用string作为BlobInput的绑定类型时,Azure Functions运行时会默认尝试用UTF-8编码把二进制Blob内容解析为字符串,这个过程会直接破坏不符合文本编码规则的原始字节,后续无论用任何编码把字符串转回字节数组,都无法还原原始的.xlsx文件结构,所以必然会报文件损坏错误,你使用Encoding.Unicode转码的操作更是加速了数据损坏。
正确实现
Azure Functions的BlobInput绑定原生支持直接绑定为Stream或byte[]类型,不需要你手动做编码转换:
方案1:直接绑定为Stream(推荐)
直接把绑定参数类型改成Stream,拿到的就是原始二进制流,可直接传入EPPlus、NPOI等xlsx处理库使用:
[BlobInput("templates/myTemplate.xlsx", Connection = "StorageAccountConnStr")] Stream templateStream
方案2:绑定为字节数组
如果需要主动操作字节内容,可直接绑定为byte[]类型:
[BlobInput("templates/myTemplate.xlsx", Connection = "StorageAccountConnStr")] byte[] templateBytes
需要构造MemoryStream时直接用拿到的字节数组即可,不需要做任何编码转换:
var templateStream = new MemoryStream(templateBytes);
内容的提问来源于stack exchange,提问作者konkri
相关产品推荐
相关产品推荐

