Node.js грозный с express.js

Я новичок в node.js и изучаю его из различных источников, таких как учебные курсы, веб-сайты и т. д. Я хочу загрузить файл, используя грозный модуль в фреймворке node.js и express.js. Каждый раз, когда я запускаю этот код, он показывает ошибку ....

  var oldpath = file.fileupload.path;
                                   ^
  TypeError: Cannot read property 'path' of undefined

Я использовал парсер тела, чтобы получить имя файла.

Код Node.js:

var express = require("express");
var app = express();
var bodyParser = require("body-parser");
var formidable = require("formidable");
var fs = require("fs");
var PORT = process.env.PORT || 5000

app.set("view engine","ejs");
app.use(bodyParser.urlencoded({extended: true}));

app.get("/" , function(req, res){
	res.render("form");
});
app.post("/fileupload" , function(req, res){
	var fileupload = req.body.filetoupload;
    var form =  new formidable.IncomingForm();
    form.parse(req, function(err, fields, files){
    	 var oldpath = files.fileupload.path;
         var newpath = "C:/Users/ayush/"+files.fileupload.name;
         fs.rename(oldpath, newpath, function(err){
         	if (err)
         		console.info(err);
         	else{
                res.write("File Uploaded");
                res.end();
            }
         }); 
    });
});

app.listen(PORT, function(){
	console.info("Server started");
});
<!DOCTYPE html>
<html>
<head>
	<title>FileUpload</title>
</head>
<body>
	<form action = "/fileupload" method = "POST">
        <label>
        	File: 
     		<input type = "file" name = "filetoupload" enctype = "multipart/form-data">
        </label>
		<button>Submit</button>
	</form>

</body>
</html>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
2 225
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я тоже новичок в этом, но enctype формы в form.ejs должен быть в теге <form>. Вместо:

<form action = "/fileupload" method = "POST">

пытаться:

<form action = "/fileupload" method = "POST" enctype = "multipart/form-data">

Теперь у вас должен быть объект файлов.

Ваше здоровье,

отметка

Это полный рабочий пример:

upload.js

'use strict';

const fss = require('fs')
const pth = require('path');
const exp = require('express');
const swg = require('swig');
const efm = require("formidable");
const app = exp();

const thm = swg.compileFile(pth.join(__dirname, '', 'upload.html'));
app.listen(9009);
app.get(`/`, async (q, r) => r.send(thm({ msg: "Select a File to Upload" })));
app.get(`/:msg`, async (q, r) => r.send(thm({ msg: q.params.msg })));
app.post('/upload', (r, q) => {
    var form = new efm.IncomingForm();

    form.parse(r, (e, p, f) => {
        let dir = pth.join(__dirname, '', '/media/');

        if (!fss.existsSync(dir)) {
            fss.mkdirSync(dir);
        }

        let nPth = dir + f.file.name;
        try {
            fss.accessSync(nPth, fss.F_OK);
            q.redirect("/File Exists");
        } catch (file_e) {
            let err = fss.renameSync(f.file.path, nPth);
            q.redirect(err ? "/Error" : "/File Uploaded");
        }
    });
});
  1. Вы можете использовать fss.access для операции "А-СИНХРОНИЗАЦИЯ".
  2. Лучше использовать функции "А-СИНХРОНИЗАЦИЯ".

upload.html

<h3>{{msg}}</h3>
<br/>
<form action = "upload" method = "post" enctype = "multipart/form-data">
    <input type = "file" name = "file">
    <input type = "submit">
</form>

также, если вы хотите загрузить несколько файлов: stackoverflow.com/questions/50560195/…

Shamshirsaz.Navid 21.12.2020 18:29

Другие вопросы по теме