首页 > 解决方案 > FormData 中的 Nodejs 额外数据

问题描述

我正在向 Sharepoint 发送带有文件的 http 请求。某些文件类型(例如 png 或其他图像)已损坏且无法读取。在查看那些时,我会在头部看到额外的对象数据,例如

----------------------------826320949470377643449533
Content-Disposition: form-data; name="file"; filename="mypdf.pdf"
Content-Type: application/pdf

在底部:

----------------------------826320949470377643449533--

有没有办法防止这种情况?我正在使用的代码如下所示:

const contentType = mime.contentType(fileName);
const data = new FormData();
data.append('file',fs.createReadStream(path));
const fileSize = req.headers['content-length']
fs.promises.file(file)).size
const fileSizeLessByte = fileSize-1;
const contentRange = 'bytes 0-'+fileSizeLessByte+'/'+fileSize;
const contentLength = fileSize;

var config = {
    method: 'put',
    url: uploadUrl,
    headers: { 
      'Content-Range': contentRange,
      'Content-Length': contentLength,
      'Content-Type': 'multipart/form-data'
    },
    data : data
  };

标签: javascriptnode.jsaxios

解决方案


我最终能够通过使用 readFileSync 而不是 FormData 来完成这项工作,而不是像 O. Jones 建议的那样使用多部分内容类型:

 const contentType = mime.contentType(fileName);
 const fileStream = fs.readFileSync(path);
 const fileSize = Buffer.byteLength(fileStream);
 const fileSizeLessByte = fileSize-1
 const contentRange = 'bytes 0-'+fileSizeLessByte+'/'+fileSize;
 const contentLength = fileSize;

 const config = {
     method: 'put',
     url: uploadUrl,
     headers: { 
         'Content-Type': contentType,
         'Content-Range': contentRange,
         'Content-Length': contentLength
     },
     data: fileStream
    };

推荐阅读