Javascript Can';t将文件上载到Node.js

Javascript Can';t将文件上载到Node.js,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,无法将文件上载到服务器。我使用了npm安装express fileupload,还使用了var fileupload=require('express-fileupload')和app.use(fileupload())。打电话的时候 router.post('/add products',(req,res)=>{ 控制台日志(请求主体); log(req.files.image); 它说不能读取空的图像。我可以给你一个完整的工作示例 项目结构: - storage (empty folder

无法将文件上载到服务器。我使用了
npm安装express fileupload
,还使用了
var fileupload=require('express-fileupload')
app.use(fileupload())
。打电话的时候

router.post('/add products',(req,res)=>{
控制台日志(请求主体);
log(req.files.image);

它说不能读取空的图像。

我可以给你一个完整的工作示例

项目结构:

- storage (empty folder)
- routes
 -> upload.route.js
- controllers
 -> upload.controller.js
index.js
index.js

const express = require('express');
const app = express();
const route = require('./routes/upload.route');
app.use('/', route);

let port = 8000;
app.listen(port);
console.log(`API listens localhost:${port}`);
这是您的
upload.route.js

const express = require('express');
const router = express.Router();
const { uploadController } = require('../controllers/upload.controller');

router.use('/media/upload', uploadController);

module.exports = router;
const formidable = require('formidable');
const path = require('path');

exports.upload = async (req, res) => {

    try {
        // Receive the media and store it
        let [uploadPath, filename] = await processUpload(req);

        return res
            .status(200)
            .send({
                success: 1,
                message: "File uploaded",
                filename,
                uploadPath
            });

    } catch (error) {

        return res
            .status(400)
            .send({
                success: 0,
                message: "Ops! Something went wrong",
                errorObject: error.message
            });
    }
}

function processUpload(req) {

    return new Promise((resolve, reject) => {
        try {
            let uploadDir = __dirname + `/../storage`;

            // We used helper formidable package
            let form = new formidable.IncomingForm()

            form.multiples = true;
            form.keepExtensions = true;

            // Upload path
            form.uploadDir = uploadDir;

            let result;

            form.on('fileBegin', function (name, file) {

                if (!file.type) reject(new Error("No media specified!"));

                const fileExt = path.extname(file.name);

                let filename = "test" + fileExt;

                file.path = path.join(uploadDir, filename);

                // Return the path where file uploaded
                result = [file.path, uuid];
            });

            form.parse(req, (err, fields, files) => {
                if (err) return reject("Upload failed.");
                resolve(result);
            });


        } catch (error) {
            reject("Upload failed.");
        }
    });
}
这是
upload.controller.js

const express = require('express');
const router = express.Router();
const { uploadController } = require('../controllers/upload.controller');

router.use('/media/upload', uploadController);

module.exports = router;
const formidable = require('formidable');
const path = require('path');

exports.upload = async (req, res) => {

    try {
        // Receive the media and store it
        let [uploadPath, filename] = await processUpload(req);

        return res
            .status(200)
            .send({
                success: 1,
                message: "File uploaded",
                filename,
                uploadPath
            });

    } catch (error) {

        return res
            .status(400)
            .send({
                success: 0,
                message: "Ops! Something went wrong",
                errorObject: error.message
            });
    }
}

function processUpload(req) {

    return new Promise((resolve, reject) => {
        try {
            let uploadDir = __dirname + `/../storage`;

            // We used helper formidable package
            let form = new formidable.IncomingForm()

            form.multiples = true;
            form.keepExtensions = true;

            // Upload path
            form.uploadDir = uploadDir;

            let result;

            form.on('fileBegin', function (name, file) {

                if (!file.type) reject(new Error("No media specified!"));

                const fileExt = path.extname(file.name);

                let filename = "test" + fileExt;

                file.path = path.join(uploadDir, filename);

                // Return the path where file uploaded
                result = [file.path, uuid];
            });

            form.parse(req, (err, fields, files) => {
                if (err) return reject("Upload failed.");
                resolve(result);
            });


        } catch (error) {
            reject("Upload failed.");
        }
    });
}
使用
POST
调用
localhost:8000/media/upload
或使用postman
form data
调用
PUT
请求时,您可以在项目中的
存储
文件夹下看到上载的文件

如果代码出现问题,请告诉我


注意:您需要使用(用于上传)软件包来运行示例

显示您的上传代码,并显示您的nodejs代码。谢谢您的欢迎。您能接受此回答吗?