Содержание
Загрузка файлов с помощью mutler
Одной из наиболее часто встречаемых задач в Node.js является загрузка файлов на сервер. В Node.js для этого нет встроенных инструментов, однако мы можем использовать дополнительные специальные пакеты. Одним из популярных подобных пакетов является mutler , который работает поверх Express.
Итак, для загрузки файлов создадим новый проект. Установим в него пакеты express и multer:
Определим в проекте новый файл index.html , в котором будет располагаться форма для загрузки файла:
Здесь важно отметить, что, чтобы на стороне сервера multer мог подхватить загруженный файл, у формы атрибут enctype должен иметь значение multipart/form-data .
В главном файле приложения app.js используем multer для получения отправленного файла:
В данном случае multer добавляется в виде компонента m >dest указывает на путь, по которому будет загружаться файл. В данном случае это папка uploads :
Если внутри проекта такой папки нет, то она автоматически будет создана.
Далее вызывается функция single() указывает, что загружаться будет один файл. Собственно на форме в index.html мы имеем поле для загрузки одного файла. В этот метод передается название поля, который исспользуется на форме для загрузки файл. Соответствующее поле в файле index.html называется "filedata", поэтому в функцию single() передается соответствующее значение.
Настроив multer, мы можем при обработке запроса получить файл через req.file .
Для тестирования приложения запустим приложение, обратимся к странице index.html и загрузим какой-нибудь файл:
После этого на консоли мы увидим что-то наподобие:
Здесь мы видим, какие метаданные получает сервер при загрузке файла, которые мы можем получть и как-нибудь использовать по своему усмотрению.
В результате в папке проекта будет создана подкаталог uploads, где мы найдем загруженный файл:
Также нам необязательно встраивать mutler глобально в конвейер обработки запросов в виде компонента middleware. Вместо этого мы можем определить использование mutler только для отдельных функций обработки запросов. Например:
The Formidable Module
There is a very good module for working with file uploads, called "Formidable".
The Formidable module can be downloaded and installed using NPM:
After you have downloaded the Formidable module, you can include the module in any application:
Upload Files
Now you are ready to make a web page in Node.js that lets the user upload files to your computer:
Step 1: Create an Upload Form
Create a Node.js file that writes an HTML form, with an upload field:
Example
This code will produce an HTML form:
var http = require(‘http’);
http.createServer(function (req, res) <
res.writeHead(200, <‘Content-Type’: ‘text/html’>);
res.write(»);
return res.end();
>).listen(8080);
Step 2: Parse the Uploaded File
Include the Formidable module to be able to parse the uploaded file once it reaches the server.
When the file is uploaded and parsed, it gets placed on a temporary folder on your computer.
Example
The file will be uploaded, and placed on a temporary folder:
Step 3: Save the File
When a file is successfully uploaded to the server, it is placed on a temporary folder.
The path to this directory can be found in the "files" object, passed as the third argument in the parse() method’s callback function.
To move the file to the folder of your choice, use the File System module, and rename the file:
Example
Include the fs module, and move the file to the current folder:
I’m using node v0.10.26 and express v4.2.0 and I’m pretty new to node. I’ve been beating my head against my desk for the past three or so hours trying to get a file upload form working with node. At this point I’m just trying to get req.files to not return undefined. My view looks like this
Here are my routes
And here’s my app.js
I saw somewhere that including methodOverride() and bodyParser() was supposed to help but I can’t even launch my server if I add those lines.