通过 API 使用 NodeJS 'fetch' 上传文件

Uploading File via API Using NodeJS 'fetch'

我正在使用现有的 API 调用通过 Nodejs 将文件发送到我们的云提供商。我在网上看到过几种不同的方法,但我认为我会坚持使用 "fetch",因为我的大多数其他 API 调用也一直在使用它。目前,我不断收到 500 内部服务器错误,我不确定为什么?我最好的结论是我没有正确发送文件,或者我的一个表单数据没有正确解析。见以下代码:

const fetch = require("node-fetch");
const formData = require("form-data");
const fs = require("fs");
var filePath = "PATH TO MY FILE ON SERVER WITH FILE NAME";

var accessToken = "Bearer <ACCESS TOKEN>;
var url = '<API URL TO CLOUD PROVIDER>';
var headers = {
    'Content-Type': 'multipart/form-data',
    'Accept': 'application/json',
    'Authorization': accessToken
};
const form = new formData();
const buffer = fs.readFileSync(filePath);
const apiName = "MY_FILE_NAME";

form.append("Content-Type", "application/octect-stream");
form.append("file", filePath);

console.log(form);

fetch(url, { method: 'POST', headers: headers, body: form })
    .then(response => response.json())
    .then(data => {
        console.log(data)
    })
    .catch(err => {
        console.log(err)
    });

这是我第一次尝试这样的事情,所以我几乎可以肯定我错过了什么。感谢任何帮助我朝着正确方向前进的帮助。

所以问题正是我上面提到的。代码没有上传我指定的文件。我终于弄明白了原因,下面是修改后的代码,它将抓取文件并上传到我们的云服务提供:

const fetch = require("node-fetch");
const formData = require("form-data");
const fs = require("fs");
var apiName = process.env['API_PATH'];
var accessToken = "Bearer" +" "+ process.env['BEARER_TOKEN'];
var url = process.env['apiEnv'] +"/" +"archive";
var headers = {
    'Accept': 'application/json',
    'Authorization': accessToken,
};
const form = new formData();
const buffer = fs.readFileSync(apiName);


const uploadAPI = function uploadAPI() {
    form.append("Content-Type", "application/octet-stream");
    form.append('file', buffer);

    fetch(url, {method: 'POST', headers: headers, body: form})
        .then(data => {
            console.log(data)
        })
        .catch(err => {
            console.log(err)
        });
};

uploadAPI();

作为 Javascript/Nodejs 的新手,我不太确定“缓冲区”变量的作用。在终于搞清楚之后,我意识到我在请求中添加了太多的主体形式参数,并且文件没有被提取并发送给提供者。上面的所有代码都使用了自定义变量,但是如果出于某种原因有人想使用它,那么只需将自定义变量替换为您自己的....再次感谢您提供的所有帮助....