Как прочитать текстовый файл из POST с express -uploadfile? - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь настроить node js сервер для загрузки туда текстовых файлов.

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

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

, но сервер трудно прочитать фактическую строку файла. потому что я всегда получаю «undefined», когда пытаюсь прочитать его по logFile.data.toString('utf8');

Не могли бы вы подсказать мне, как прочитать строку загруженного текстового файла?

Вот мой проверенный код, спасибо you.:

html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

<h3>ENTER</h3>
<form action="/loadfile" method="post" enctype="multipart/form-data">
    <table>

        <tr>
            <td>file : </td>
            <td><input type="file" name="fileName"></td>
        </tr>
        <tr>
            <td><input type="submit" value="submit"></td>
        </tr>
    </table>
</form>

</body>
</html>

logFile - это файл из POST. Я думаю, что logFile.data возвращает байтовый массив содержимого его текстового файла, поэтому я попытался преобразовать его в String с помощью toString ('utf8') или toString ().

Это node js сервер:

var fileupload = require("express-fileupload");
  app.use(fileupload());
  app.use(bodyParser.urlencoded({extended: false}));

           (fetching html... )

app.post('/loadfile', (req,res) =>{

      console.log("react to post action - loadFile");
      res.send("submit ok");
        var logFile = req.files;

        console.log(logFile);
        var buffer = logFile.data;
        console.log(buffer.toString('utf8'));

    });



когда я помещаю файлы "test.txt" в этот html, это реакция консоли сервера.


2020-02-14T08:18:50.909771+00:00 app[web.1]: react to post action - loadFile
2020-02-14T08:18:50.912904+00:00 app[web.1]: {
2020-02-14T08:18:50.912905+00:00 app[web.1]: fileName: {
2020-02-14T08:18:50.912906+00:00 app[web.1]: name: 'test.txt',
2020-02-14T08:18:50.912907+00:00 app[web.1]: data: <Buffer 68 65 6c 6c 6f 20 74
68 69 73 20 69 73 20 74 65 73 74 20 74 65 78 74 20 66 69 6c 65>,
2020-02-14T08:18:50.912907+00:00 app[web.1]: size: 28,
2020-02-14T08:18:50.912908+00:00 app[web.1]: encoding: '7bit',
2020-02-14T08:18:50.912908+00:00 app[web.1]: tempFilePath: '',
2020-02-14T08:18:50.912912+00:00 app[web.1]: truncated: false,
2020-02-14T08:18:50.912912+00:00 app[web.1]: mimetype: 'text/plain',
2020-02-14T08:18:50.912913+00:00 app[web.1]: md5: 'f4e8dbc8c1fa4d01329d4f8260511
1d2',
2020-02-14T08:18:50.912913+00:00 app[web.1]: mv: [Function: mv]
2020-02-14T08:18:50.912914+00:00 app[web.1]: }

** I can see the uploaded file's information properly **

2020-02-14T08:18:50.912914+00:00 app[web.1]: }
2020-02-14T08:18:50.914538+00:00 app[web.1]: TypeError: Cannot read property 'to
String' of undefined
2020-02-14T08:18:50.914539+00:00 app[web.1]: at /app/server.js:111:28
2020-02-14T08:18:50.914540+00:00 app[web.1]: at Layer.handle [as handle_request]
 (/app/node_modules/express/lib/router/layer.js:95:5)
2020-02-14T08:18:50.914540+00:00 app[web.1]: at next (/app/node_modules/express/
lib/router/route.js:137:13)
2020-02-14T08:18:50.914541+00:00 app[web.1]: at Route.dispatch (/app/node_module
s/express/lib/router/route.js:112:3)
2020-02-14T08:18:50.914541+00:00 app[web.1]: at Layer.handle [as handle_request]
 (/app/node_modules/express/lib/router/layer.js:95:5)
2020-02-14T08:18:50.914541+00:00 app[web.1]: at /app/node_modules/express/lib/ro
uter/index.js:281:22
2020-02-14T08:18:50.914542+00:00 app[web.1]: at Function.process_params (/app/no
de_modules/express/lib/router/index.js:335:12)
2020-02-14T08:18:50.914542+00:00 app[web.1]: at next (/app/node_modules/express/
lib/router/index.js:275:10)
2020-02-14T08:18:50.914542+00:00 app[web.1]: at urlencodedParser (/app/node_modu
les/body-parser/lib/types/urlencoded.js:100:7)
2020-02-14T08:18:50.914543+00:00 app[web.1]: at Layer.handle [as handle_request]
 (/app/node_modules/express/lib/router/layer.js:95:5)

**But read the file's actual string by 'toString()' is not possible, why??**

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Из документов вы должны получить доступ к загружаемому файлу через req.files.[HTMLInput-name-attribute], вам не хватает HTMLInput-name-attribute в обработчике маршрута. Источник . Попробуйте это:

app.post('/loadfile', (req, res) => {

  console.log("react to post action - loadFile");
  res.send("submit ok");
  // Notice the addition of the "fileName" key
  // It is the HTML name attribute value here in the input element:
  // <td><input type="file" name="fileName"></td>
  var logFile = req.files.fileName;

  console.log(logFile);
  var buffer = logFile.data;
  console.log(buffer.toString('utf8'));

});
0 голосов
/ 14 февраля 2020

res.send ('submit ok') должно быть внизу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...