Javascript 如何正确使用express fileupload
我正在尝试集成Javascript 如何正确使用express fileupload,javascript,node.js,express,Javascript,Node.js,Express,我正在尝试集成express fileupload以将图像上传到我的服务器。我遵循了此链接中提供的示例,但它不起作用。下面我只包含了与相关代码行相关的每个文件 index.ejs:相关行 <form method="post" action="/images" enctype="multipart/formdata"> <div class="panel-body form-horizontal&qu
express fileupload
以将图像上传到我的服务器。我遵循了此链接中提供的示例,但它不起作用。下面我只包含了与相关代码行相关的每个文件
index.ejs:相关行
<form method="post" action="/images" enctype="multipart/formdata">
<div class="panel-body form-horizontal">
<div class="form-group col-md-12">
<label class="col-sm-2 control-label" for="file">Browse:</label>
<div class="col-md-10">
<input class="form-control" type="file" name="file" id="file">
</div>
</div>
</div>
</form>
configure.js
const express = require('express');
const config = require('./server/configure');
let app = new express();
app.set('port', process.env.PORT || 3300);
app = config(app);
app.listen(app.get('port'), () => {
console.log(`Server up: http://localhost:${app.get('port')}`);
});
const express = require('express');
const path = require('path');
const expressFileUpload = require('express-fileupload');
const routes = require('./routes');
module.exports = (app) => {
// applying expressFileUpload middleware
app.use(expressFileUpload());
routes(app);
app.use('/public/', express.static(path.join(__dirname, '../public')));
return app;
};
const image = require('../controllers/image');
module.exports = (app) => {
app.post('/images', image.create);
};
module.exports = {
create(req, res) {
let image = req.files.file;
}
}
routes.js
const express = require('express');
const config = require('./server/configure');
let app = new express();
app.set('port', process.env.PORT || 3300);
app = config(app);
app.listen(app.get('port'), () => {
console.log(`Server up: http://localhost:${app.get('port')}`);
});
const express = require('express');
const path = require('path');
const expressFileUpload = require('express-fileupload');
const routes = require('./routes');
module.exports = (app) => {
// applying expressFileUpload middleware
app.use(expressFileUpload());
routes(app);
app.use('/public/', express.static(path.join(__dirname, '../public')));
return app;
};
const image = require('../controllers/image');
module.exports = (app) => {
app.post('/images', image.create);
};
module.exports = {
create(req, res) {
let image = req.files.file;
}
}
image.js
const express = require('express');
const config = require('./server/configure');
let app = new express();
app.set('port', process.env.PORT || 3300);
app = config(app);
app.listen(app.get('port'), () => {
console.log(`Server up: http://localhost:${app.get('port')}`);
});
const express = require('express');
const path = require('path');
const expressFileUpload = require('express-fileupload');
const routes = require('./routes');
module.exports = (app) => {
// applying expressFileUpload middleware
app.use(expressFileUpload());
routes(app);
app.use('/public/', express.static(path.join(__dirname, '../public')));
return app;
};
const image = require('../controllers/image');
module.exports = (app) => {
app.post('/images', image.create);
};
module.exports = {
create(req, res) {
let image = req.files.file;
}
}
错误
我在下面一行得到一个错误let image=req.files.file代码>哪些状态
TypeError:无法读取未定义的属性“文件”
为什么文件未定义?如何使用express fileunload正确上载图像?节点js代码中没有问题。它工作正常。问题在HTML文件中
表单enctype必须是enctype=“多部分/表单数据”&而不是您添加的内容
以下是参考资料:
在使用文件上载和express时,我建议您使用
文件上传很棘手
当一个或多个文件“到达”服务器时,您可以使用两种不同的方法存储它们:
将文件保存到已知安全位置的磁盘
将文件保存在RAM内存中
这两种方法各有利弊。由你决定哪一个更适合你的需要
下面是我的服务器上的一个示例,用于处理用户配置文件映像的上载(GitHub项目链接:)。它是用typescript编写的,但语法几乎相同
文件中间件-FileMiddleware.ts
const express = require('express');
const config = require('./server/configure');
let app = new express();
app.set('port', process.env.PORT || 3300);
app = config(app);
app.listen(app.get('port'), () => {
console.log(`Server up: http://localhost:${app.get('port')}`);
});
const express = require('express');
const path = require('path');
const expressFileUpload = require('express-fileupload');
const routes = require('./routes');
module.exports = (app) => {
// applying expressFileUpload middleware
app.use(expressFileUpload());
routes(app);
app.use('/public/', express.static(path.join(__dirname, '../public')));
return app;
};
const image = require('../controllers/image');
module.exports = (app) => {
app.post('/images', image.create);
};
module.exports = {
create(req, res) {
let image = req.files.file;
}
}
用于处理磁盘和内存存储的中间件。我可以选择哪一条最适合特定的快速路线(中间件下的示例)
从“路径”导入路径;
从“multer”进口multer;
导出默认类FileMiddleware{
公共静态只读memoryLoader=multer({
存储:multer.memoryStorage(),
限制:{
文件大小:2097152,//2 MB
},
});
公共静态只读diskLoader=multer({
存储:multer.diskStorage({
目的地:(_请求,_文件,cb)=>{
cb(null,path.join(_dirname,'../tmp/upload');
},
}),
限制:{
文件大小:67108864,//64 MB
},
});
}
用户路由-User.ts
const express = require('express');
const config = require('./server/configure');
let app = new express();
app.set('port', process.env.PORT || 3300);
app = config(app);
app.listen(app.get('port'), () => {
console.log(`Server up: http://localhost:${app.get('port')}`);
});
const express = require('express');
const path = require('path');
const expressFileUpload = require('express-fileupload');
const routes = require('./routes');
module.exports = (app) => {
// applying expressFileUpload middleware
app.use(expressFileUpload());
routes(app);
app.use('/public/', express.static(path.join(__dirname, '../public')));
return app;
};
const image = require('../controllers/image');
module.exports = (app) => {
app.post('/images', image.create);
};
module.exports = {
create(req, res) {
let image = req.files.file;
}
}
用于处理化身文件上载的用户路由。您可以看到,我正在定义路径、文件中间件(在本例中是一个内存存储—由映像键标识的单个文件)以及用于处理该过程的控制器
从“express”导入{Router};
从'@app/controller'导入{UserController};
从'@app/middleware'导入{FileMiddleware};
常量路由器=路由器();
转发器(
“/user/avatar”,
FileMiddleware.memoryLoader.single('image'),
UserController.updateAvatar
);
导出默认路由器;
在控制器中,您可以使用req.file检索图像,就这么简单
正如我所说的使用Multer,配置和使用非常简单和直观
PS:记住,在表单中使用文件上载意味着添加enctype=“multipart/form data”