Node.js GCS上传时createWriteStream的resumable、validation参数作用及报错解决原理
Google Cloud Storage
createWriteStream 相关参数作用说明 使用Google Cloud Storage Node.js SDK上传文件时触发socket hang up报错,本质是多步网络请求过程中连接被异常中断,你提到的两个参数作用和解决问题的原理如下:
resumable 参数
该参数控制是否启用GCS的可恢复上传机制:
- SDK默认会对大小超过10MB的文件自动启用可恢复上传,该模式需要先向服务端发起请求创建上传会话、获取会话ID,再按分片依次上传文件内容,全部分片上传完成后再提交结束请求,整个流程需要维持多轮长连接,一旦网络存在波动、或者客户端与服务端的连接超时阈值不匹配,就会出现连接被提前断开的
socket hang up报错 - 设为
false时会直接使用单请求普通上传模式,整个文件内容在单次HTTP请求中传输,无需维持多步上传会话,大幅降低了连接中断的概率
validation 参数
该参数控制SDK是否自动执行上传完整性校验:
- 默认为开启状态,文件上传请求完成后,SDK会额外发起请求拉取上传后文件的元数据,比对本地文件的MD5/CRC32C校验值与服务端存储的校验值是否一致,这个额外的请求如果触发连接复用超时,也会抛出
socket hang up报错 - 设为
false时会跳过SDK内置的自动校验步骤,上传请求得到服务端响应后直接结束流程,不会发起额外的校验请求,进一步降低了连接异常的概率
.createWriteStream({ resumable: false, validation: false, // 其他配置项 })
注意事项
该配置更适合小文件上传场景:
- 如果上传的是大于100MB的大文件,禁用可恢复上传反而会提升上传失败概率,一旦单请求中断需要重新上传整个文件
- 禁用自动校验后如果需要保证文件完整性,需要自行实现校验逻辑,手动比对本地文件与服务端返回的文件元数据中的校验值是否一致
内容的提问来源于stack exchange,提问作者PedroSG
相关产品推荐
相关产品推荐

