2016-12-18 1 views
0

У меня есть форма в клиенте, который загрузить файлПолучить двоичные данные из запроса файлы Экспресс JS

<form method="post" action="/"> 
    <input type="file"/> 
</form> 

как я могу прочитать содержимое данных и бинарное содержимое данных с этим файлом в сервере с использованием nodeJS и Express? ? Как это ...

app.get('/',(req, res) => { 
    //handle data content 
    //handle binary data content 
} 

ответ

1

Использовать промежуточное программное обеспечение ExpressJS, например multer.

Примечание: приведенные ниже примеры НЕ предназначены для использования в производственных условиях. Ни HTML-код, ни явный js-сервер не используют никакой безопасности. Использование этого примера в рабочей среде приведет к тому, что ваша система и, возможно, ваша сеть будут открыты для атак.

Также обратите внимание: я предполагаю, что у вас есть очень простое знакомство с express js, в том числе, как сделать простые маршруты GET и POST.

Пусть У меня есть страница с этой простой HTML, который позволяет человеку, чтобы загрузить любой файл любого типа и размера на мой сайт:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Upload file to ExpressJS backend</title> 
</head> 
<body> 
<form enctype="multipart/form-data" action="/do-upload" method="post"> 
    <input type="file" name="file_from_user"/> 
    <input type="submit" value="Submit"/> 
</form> 
</body> 
</html> 

<form ...> указывает, что она будет загружать multipart/form-data полезную нагрузку мой /do-upload конечная точка в виде POST http-запрос. Итак, на моем сервере мне нужно ...

  1. Укажите конечную точку /do-upload.
  2. Разрешить /do-upload конечной точке принимать POST http-запросы.
  3. Разрешить /do-upload Конечная точка принимать multipart/form-data.

Элементы 1 и 2 решены довольно легко с помощью простой старой экспресс-маршрутизации js.

Твердая часть - это элемент 3, если мы ограничены только выражением js. К счастью, мы не ограничены, и поэтому мы будем использовать промежуточное ПО multer. Multer автоматически знает, как принимать многочастные формы-данные и расшифровывать загружаемые файлы из него (точная механика того, как файлы загружаются через многопрофильные запросы данных формы, является проблемой, которую я оставляю вам, читателю, обнаружить).

Мы создадим наш маршрут /do-upload, добавим в него экземпляр промежуточного программного обеспечения multer и затем сделаем что-нибудь, когда кто-то попытается загрузить файл. Вот код:

var express = require('express'), 
    multer = require('multer'), 

    // Set up the middleware, which automatically handles files uploaded to it. 
    // The "dest" property specifies the location to save uploaded files. 
    // You will need to make sure this directory exists. 
    upload_middleware = multer({dest: 'tmp/uploads/'}), 

    app = express(), 

    // This is the name of the <input> element from the HTML that will 
    // send the file to the server. 
    form_element_name = 'file_from_user'; 

// The second parameter is how one injects middleware into a route in express js. 
app.post('/do-upload', upload_middleware.single(form_element_name), function (request, response) { 
    console.log('Got a file!'); 

    // The multer middleware adds the "file" property 
    // to the request object. The file property contains useful 
    // information about the file that was uploaded. 

    console.log('The original filename was: "%s".', request.file.originalname); 
    console.log('I saved the file to: %s.', request.file.path); 
    console.log('The file is %s bytes in size.', request.file.size); 

    // Finish the request with an HTTP 200 code and an informative message, so we don't leave user 
    // hanging in his or her browser. 
    response 
    .status(200) 
    .send('File uploaded successfully!'); 
}); 

// ... other routes 
// ... app.listen call that starts your server 

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

Источники и дальнейшее чтение:

+0

Можете ли вы объяснить это более ясно: D я новичок. Tks так много! –

+1

@ M.Tae Я работаю над примером. Я напишу еще один комментарий здесь, когда закончу, и обновил свой ответ. – kevin628

+1

@ M.Tae Я просто обновил свой ответ на примере. – kevin628

Смежные вопросы