调用OneDrive API按ID替换文件内容后生成空文件问题咨询
问题排查点
- axios传参字段使用错误
axios 发送请求时,携带请求体的参数为data而非body,你当前代码中填写的body字段不会被axios识别发送,导致实际请求没有携带文件内容,最终上传的文件为空,这是最核心的原因。
- axios传参字段使用错误
- 二进制内容处理错误
你将req.file.buffer先执行toString()再转可读流的操作会破坏二进制文件的编码结构,尤其是图片、PDF这类非文本文件,转字符串会导致内容不可逆损坏。不需要额外做toString处理,直接传入Buffer或者原生可读流即可。
- 二进制内容处理错误
- Content-Type不匹配
你当前配置的Content-Type为application/pdf,但你提到req.file.buffer是图片类型的buffer,类型不匹配也可能导致接口处理内容异常,需要改成和上传文件对应的MIME类型。
- Content-Type不匹配
修正后的代码示例
const { data } = await axios({ method: "put", url: `https://graph.microsoft.com/v1.0/me/drive/items/${fileId}/content`, headers: { Authorization: "bearer " + req.user.auth.accessToken, "Content-Type": req.file.mimetype, // 直接读取上传文件的原生MIME类型,避免手动配置错误 }, responseType: "json", data: req.file.buffer, // 直接传入buffer即可,无需额外转流 });
补充说明
如果需要上传的文件大小超过4MB,该单步上传接口不支持,需要使用分片上传逻辑处理。
内容的提问来源于stack exchange,提问作者Bipana shrestha
相关产品推荐
相关产品推荐

