как загрузить и прочитать файл с экспресс - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть вопрос. Я посмотрел некоторые вопросы здесь, но я не могу получить ответ. Мой вопрос, я хочу загрузить и прочитать файл json, я пытаюсь использовать «multer», но не смог.Поэтому я хочу поместить загружаемый файл в переменную результата.Вы можете мне помочь?Как мне этого добиться?

HTML;

<!DOCTYPE html>
<html lang="en">
  <head></head>
  <body>
    <form action="/import" enctype="multipart/form-data" method="post">
      <input type="file" name="filename">
      <input type="submit" value="Upload">
    </form>  
  </body>
</html>

Server.js

const express = require('express');
const multer  = require('multer');
const upload  = multer({
  dest: 'uploads/' // "uploads"
}); 

const app = express();

app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});

route.post("/import", upload.single("filename") (req, res, next) => {
  var result = require(# I want to send the json file I uploaded here, and I need to see the contents of the json file as is #)
  res.json(result)

      res.redirect("/")
});

app.listen(3000);

1 Ответ

0 голосов
/ 23 сентября 2018

upload.single() анализирует поток данных и сохраняет в виде файла на основе конфигурации.В вашем случае он будет искать поле filename во входящем запросе и сохранит файл в папке uploads/.Метаданные файла доступны в req.file объекте.Вы можете просто набрать console.log(req.file), чтобы просмотреть информацию.

Чтобы прочитать содержимое файла, вы можете использовать поле req.file.path.Вот как:

const fs = require("fs");
const path = require("path");

/** In the controller */
const absolutePath = path.join(__dirname, req.file.path);
const jsonString = fs.readFileSync(absolutePath, "utf-8");
const jsonObject = JSON.parse(jsonString);
console.log(jsonObject);

Вот как будет выглядеть полный server.js:

const express = require("express");
const multer = require("multer");
const fs = require("fs");
const path = require("path");
const upload = multer({
    dest: "uploads/" // "uploads"
});

const app = express();

app.get("/", (req, res) => {
    res.sendFile(__dirname + "/index.html");
});

const route = express.Router();
route.post("/import", upload.single("filename"), (req, res, next) => {
    console.log(req.file);
    const absolutePath = path.join(__dirname, req.file.path);
    const jsonString = fs.readFileSync(absolutePath, "utf-8");
    const jsonObject = JSON.parse(jsonString);
    console.log(jsonObject);
    res.redirect("/");
});

app.use(route);

app.listen(3000);

Я добавил некоторые части, которые отсутствовали в вашем фрагменте (например, express.Router).Хотя они могут отличаться.

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