Загрузка файла через API с использованием NodeJS 'fetch' - PullRequest
0 голосов
/ 10 марта 2020

Я использую существующий вызов API для отправки файла нашему облачному провайдеру через Nodejs. Я видел несколько разных способов сделать это онлайн, но решил, что я буду придерживаться метода «выборки», так как большинство других вызовов 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)
    });

Я впервые пытаюсь что-то подобное, так что я почти уверен, что что-то упустил. Приветствуется любая помощь в правильном направлении.

1 Ответ

0 голосов
/ 11 марта 2020

Так что проблема была именно в том, что я упомянул выше. Код не загружал указанный мной файл. Я наконец выяснил, почему и ниже приведен модифицированный код, который будет захватывать файл и загружать его в наш облачный сервис:

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/octect-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 Я действительно не был уверен, что сделала переменная "buffer". После окончательного выяснения этого я понял, что добавлял слишком много параметров формы тела к запросу, и файл не был взят и отправлен поставщику. Весь приведенный выше код использует пользовательские переменные, но если по какой-то причине кто-то захочет его использовать, просто замените пользовательские переменные на свои .... Еще раз спасибо за любую помощь ....

...