Задать вопрос
@alexandrtumaykin
PHP-программист

Как отправить файл из node js через fetch и Formdata?

Добрый день.
Делаю приложение на Electron и нужно отправить локальный файл на сервер.

Из входных данных имеется массив с именами и путями к файлам на компьютере. Т.е. нужно отправить файлы без использования File Input в Html. Задачу нужно решить чисто на NodeJS. Желательно с применением fetch

Пример моего кода в упрощенном виде:
let data = new FormData();
data.append('newName', file.name);
data.append('file', fs.readFileSync(file.path), file.name);

fetch(url, {
      method: 'POST',
      body: data
})
.then(console.log.bind(console));


Объект file:

let file = {
    name: 'test.jpg',
    path: 'D:\test.jpg'
}


Потраченные часы на гугление подсказок ни к чему не привели. Большинство вариантов сводится к использованию . И использования объекта File, полученного таким образом.

На сервере есть рабочий скрипт на PHP, который должен принять файл через $_FILES; Пока этого добиться не удалось.
Если сильно упростить задачу, то есть js файл, который при "node test.js" должен отправить локальный файл на сервер с PHP

p.s. в заголовках передается в этом случае следующее:
------WebKitFormBoundaryDKpQTS4WNgpByUYC
Content-Disposition: form-data; name="newName"

test.jpg
------WebKitFormBoundaryDKpQTS4WNgpByUYC
Content-Disposition: form-data; name="file"


------WebKitFormBoundaryDKpQTS4WNgpByUYC--


И соотв-но на сервере:
var_dump($_FILES);

//
array()
  • Вопрос задан
  • 4781 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@alexandrtumaykin Автор вопроса
PHP-программист
Нашел решение.

data.append('file', new Blob([fs.readFileSync(file.path)]), file.name);
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@titronfan
Гляньте пакет https://github.com/expressjs/multer
Заодно и fetch можно попробовать подключить к нему.
Ответ написан
надеюсь третий раз не затупил)

посмотрел код form data , не правильно заданы параметры при заполнении файлов
тут я вижу такой пример

stackoverflow.com/questions/25344879/uploading-fil...
Гляньте тоже

form.append('file', '', {
filename: 'myfile.txt',
contentType: 'text/plain'
});

или

form.append('file', fs.createReadStream(filepath));

----------------------
var FormData = require('form-data');
var Fs = require('fs');
var Fetch = require('node-fetch');

Fs.debug = true;

var Form = new FormData();
Form.append('my_field', 'my value');
Form.append('my_file',
Fs.createReadStream('C:\\Users\\user\\documents\\visual studio 2015\\' +
'Projects\\android.forms.test\\NodejsConsoleApp1\\app.js'));

Fetch('myip.ru',
{
method: 'POST',
body: Form
});
Проверил лично
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы