NodeJS分片上传携带FULL_OBJECT校验和时出现invalid checksum错误的问题咨询及解决方案请求
NodeJS分片上传携带FULL_OBJECT校验和时出现invalid checksum错误的问题咨询及解决方案请求
问题背景
我正在测试将文件上传到AWS S3(用Docker化的Minio模拟环境),具体流程如下:
- 先计算文件的校验和,代码实现如下:
const fileContent = await readFile(fileName, { encoding: "binary", }); const checksum = checksums.crc32(fileContent);
- 接着创建分片上传任务
- 保存生成的
UploadId用于后续操作 - 在
for循环中逐个上传文件分片 - 将每个分片的响应结果存入一个数组
- 最后发送
CompleteMultipartUploadCommand完成整个文件的上传
但如果我在完成请求中加入以下两行代码:
ChecksumType: "FULL_OBJECT", ChecksumCRC32: checksum.toString(),
就会触发校验错误;去掉这两行就能正常上传,但这不符合我的需求。
期望达成的效果
- 希望在发送
CompleteMultipartUploadCommand时,将整个文件(从第一字节到最后一字节)的校验和传递给AWS S3 - 让S3在将分片重新组装为完整文件时,能够校验整个文件的数据完整性
补充说明
- 我了解还有其他数据完整性校验方式(比如复合校验和),但目前只希望实现这种全对象校验的方式
- 我也研究过
@aws-sdk/lib-storage包导出的Upload类源码,但没搞懂它是如何实现FULL_OBJECT校验和的 - 我查阅过官方相关文档,但都没找到能解决问题的有效内容:
- 分片上传并验证数据完整性的教程
- S3对象完整性检查文档
- S3分片上传概述文档
我的疑问
提前感谢各位的解答!
- 如果可以的话,能否提供一个示例代码仓库或者直接分享可运行的示例代码?
- 能否帮我梳理清楚全对象校验和与数据完整性的相关知识点?我现在还有很多概念模糊的地方。
- 我不太理解AWS S3生成CRC32校验和的格式:我生成的全文件校验和是纯数字(比如
209188370),但S3返回的分片校验和是类似VG/A4w==这样的字符串。有没有人知道在NodeJS中如何生成和S3格式一致的CRC32校验和?我感觉这部分代码可能存在问题,才导致校验失败。
备注:内容来源于stack exchange,提问作者Mohammad Jawad Barati
相关产品推荐
相关产品推荐

