Postman用form-data上传文件到Backblaze B2时文件损坏相关问题咨询
问题1:额外添加的头部内容是谁生成的?
这些是multipart/form-data格式的标准边界标识,由Postman(以及你示例curl命令中的--form参数)自动生成,并非Backblaze B2添加。由于B2的上传接口不会解析form-data格式,会直接把整个请求体当做文件内容存储,因此这些边界标识就被写入了最终文件导致损坏。
问题2:当前上传操作是否存在错误?
存在两处明显错误:
- Backblaze B2的文件上传接口要求请求体直接传输原始文件二进制内容,不支持
multipart/form-data格式的请求体,使用form-data上传本身不符合接口规范。 - 你提供的curl命令存在头字段冲突:手动指定了
Content-Type: application/json,但--form参数会强制curl生成multipart/form-data格式的请求体,头字段声明和实际请求体格式完全不匹配。
你使用binary模式上传正常的原因就是该模式会直接发送文件原始二进制内容,完全符合B2接口的要求。
问题3:使用FileReader.readAsBinaryString()直接传输二进制是否合规可行?
该方法属于已废弃的API,不推荐使用。它会将二进制内容转为UTF-16编码的字符串传输,处理非文本类文件时极易出现编码异常导致文件损坏。
如果需要直接传输文件二进制内容,合规的实现方式是使用FileReader.readAsArrayBuffer()读取文件,直接将ArrayBuffer作为请求体传输即可,只要请求没有额外包装form-data格式,就符合B2接口的上传要求。
内容的提问来源于stack exchange,提问作者Rabie Daddi
相关产品推荐
相关产品推荐

