Node.js — Отправка файла с помощью Axios POST

#javascript #node.js #post #axios

#javascript #node.js #Публикация #axios

Вопрос:

Я пытаюсь отправить PDF-файл на веб-сайт, используя библиотеку Axios на узле JS. На сайте приведен пример, который отлично работает, если я использую CURL:

 curl -F "file=@test.pdf" https://my.hiddenwebsite.com/upload
  

Но если я попытаюсь повторить HTTP-запрос с помощью Axios, это выдаст мне сообщение об ошибке FILE_NOT_PROVIDED с кодом 400. Ниже приведен код, который я пытался выполнить.

   let form = new FormData();
  let stream = fs.createReadStream(path.join(__dirname, "test.pdf"));
  form.append("file", stream);

  let formHeaders = form.getHeaders();

  const request_config = {
    headers: {
      ...formHeaders,
    },
  };

  axios
    .post("https://my.hiddenwebsite.com/upload", form, request_config)
    .then((res) => {
      console.log(res.data);
    })
    .catch((err) => {
      console.log(err.response.data);
    });
  

Если бы кто-нибудь мог дать мне подсказку о том, что я делаю неправильно, это было бы здорово.

Комментарии:

1. createReadStream возвращает поток, а не файл. Возможно readfilesync , это поможет вам лучше

2. Ваш код работает для меня на тестовом сервере. Интересно, ожидает ли ваш сервер конкретное имя файла? Может ли он ожидать чего-то другого, кроме «file»?

3. @AndreNuechter Я только что пробовал, это тоже не работает, та же ошибка

4. @TerryLennox Я на самом деле не эксперт по CURL, я не так часто его использую, но я подумал, что это «file=@text.pdf » означало, что серверу нужен файл с именем файла «file». Я ошибаюсь?

5. Извиняюсь, @Sosnos, вы правы. Это странно.. Я могу загрузить на локальный тестовый сервер, на котором работает Express / Multer, используя ваш код … должно быть, что-то еще пошло не так…