Как сохранить файл, отправленный через formData?
Есть обработка пост-запроса. В запросе передается файл через formData. Вопрос: как этот файл сохранить? Чтоб он прям в виде exe лежал в моей директории? Я поискал и нашел пакет "express-formidable", который позволяет спарсить файлы из formData. Но как мне его сохранить в файловую систему, я не понимаю... Вот весь код сервера:
const express = require('express');
const formidable = require('express-formidable');\
const PORT = 8000;
const app = express();
app.use(express.urlencoded({extended: false}));
app.use(formidable());
app.listen(PORT, () =>{
console.log(`Server works on port ${PORT}`);
});
app.get('/', (req, res) =>{
res.send('server works, PORT is ' + PORT);
});
app.post('/upload', (req, res) => {
});
Ответы (2 шт):
При передаче файла в http запросе через multipart/form-data в http заголовке Content-Type передаётся сам multipart/form-data и boundary(разделитель файлов).
В теле самого POST запроса содержится этот файл, заключённый в переденный boundary. Запишите этот "boundary" во второй части заголовка Content-Type в переменную boundary В первой строчке тела запроса будет строка:
--${boundary}\r\n
После идёт небольшое описание файла:
Content-Disposition: form-data; name="имя параметра (некоторые апи требуют photo, audio и тд";\r\nContent-Type: text/html\r\n\r\n
После этой строки начинается сам файл. Конец файла обозначен похожей строкой:
\r\n--${boundary}--\r\n
Обрежьте содержимое между этими строками, это и будет переденный файл, а потом запишите это в локальный файл с помощью fs.
Вот так я делал отправку файла по стандартной библиотеке https с помощью multipart/form-data:
Можно воспользоваться либой fs, в частности методом writeFile, или его синхронным собратом:
// Создание файла
filehandle = fs.open(<имя файла>);
// Запись данных в файл
await filehandle.writeFile(<тело файла>, <опции>);
