我如何 post 使用 Nodejs 和 Multer 制作图像?
How do I post an image with Nodejs and Multer?
我正在尝试构建一个包含上传文件(例如图像)和 posting 的应用程序。
这是我目前所做的:
var express = require('express');
var multer = require('multer');
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './public/img');
},
filename: function (req, file, cb){
cb(null, file.originalname + '-' + Date.now());
}
});
var upload = multer({storage: storage});
所以上面的代码会将我上传的文件保存在一个名为 'img'
的文件夹中
module.exports = function(app){
app.get('/', function(req, res){
res.render('index');
});
app.post('/upload', upload.single('file'), function(req, res){
res.send(req.file);
});
}
现在,在最后一个 post 请求中,我获得了 'req.file' 中文件的所有元数据信息。我想获取文件并 post 如果有人提出此请求,例如:
app.get('/postedfiles', function(req, res){});
我应该将它们保存在数据库中还是其他什么地方?
不是,它保存在你的电脑里,在你选择的目录里。
这是多人上传的普通 html 表格。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form accept="image/x-png,image/gif,image/jpeg" enctype="multipart/form-data" action="/profile" method="post">
<input type="file" name="avatar" value="">
<input type="submit" name="" value="ssss">
</form>
</body>
</html>
这是我们的后端代码。在存储中,我选择上传文件的位置,在 /upload
目录下,并为它们提供当前时间的文件名。我们为设置声明了 upload
变量,然后我们在收到 post 请求时使用 upload.single('avatar')
,我们在回调之前声明它。这里的avatar
是input标签里面的outhtml形式的文件名。在回调中,我们可以使用 req.file
访问我们的文件。模块是这样保存文件的,非常好用
var express = require('express')
var multer = require('multer')
var app = express()
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, __dirname + '/uploads') //you tell where to upload the files,
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now() + '.png')
}
})
var upload = multer({storage: storage,
onFileUploadStart: function (file) {
console.log(file.originalname + ' is starting ...')
},
});
app.set('view engine', 'ejs');
app.get('/', function(req, res, next){
res.render('mult'); //our html document
})
app.post('/profile', upload.single('avatar'), function (req, res, next) {
// req.file is the `avatar` file
console.log(req.file);
return false;
})
请确保您提供的图像和扩展名是 png 或 jpeg,或者您想要使用的任何内容,否则它不会被计算机视为图像。
更新你的问题
如果您想在不刷新页面的情况下向客户端显示图像,只需在客户端浏览器上使用 AJAX 和 get 请求即可。您可以将文件上传到您的 网络服务器 或 网络服务器 并从那里检索图像。比如我在Whosebug中的头像保存 here
您可以在获取请求中使用参数来接收来自服务器的所有文件。
例如,假设客户端向 /uploads/imageOfApet.png
发出获取请求。
app.get('/uploads/:theImageName', function(req, res){
console.log(req.params.theImageName); //returns the imageOfApet.png
var theName = req.params.theImageName; //imageOfApet.png
res.sendFile(__dirname + "/uploads/" + theName); //Sending the user the file
})
我正在尝试构建一个包含上传文件(例如图像)和 posting 的应用程序。
这是我目前所做的:
var express = require('express');
var multer = require('multer');
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './public/img');
},
filename: function (req, file, cb){
cb(null, file.originalname + '-' + Date.now());
}
});
var upload = multer({storage: storage});
所以上面的代码会将我上传的文件保存在一个名为 'img'
的文件夹中module.exports = function(app){
app.get('/', function(req, res){
res.render('index');
});
app.post('/upload', upload.single('file'), function(req, res){
res.send(req.file);
});
}
现在,在最后一个 post 请求中,我获得了 'req.file' 中文件的所有元数据信息。我想获取文件并 post 如果有人提出此请求,例如:
app.get('/postedfiles', function(req, res){});
我应该将它们保存在数据库中还是其他什么地方?
不是,它保存在你的电脑里,在你选择的目录里。
这是多人上传的普通 html 表格。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form accept="image/x-png,image/gif,image/jpeg" enctype="multipart/form-data" action="/profile" method="post">
<input type="file" name="avatar" value="">
<input type="submit" name="" value="ssss">
</form>
</body>
</html>
这是我们的后端代码。在存储中,我选择上传文件的位置,在 /upload
目录下,并为它们提供当前时间的文件名。我们为设置声明了 upload
变量,然后我们在收到 post 请求时使用 upload.single('avatar')
,我们在回调之前声明它。这里的avatar
是input标签里面的outhtml形式的文件名。在回调中,我们可以使用 req.file
访问我们的文件。模块是这样保存文件的,非常好用
var express = require('express')
var multer = require('multer')
var app = express()
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, __dirname + '/uploads') //you tell where to upload the files,
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now() + '.png')
}
})
var upload = multer({storage: storage,
onFileUploadStart: function (file) {
console.log(file.originalname + ' is starting ...')
},
});
app.set('view engine', 'ejs');
app.get('/', function(req, res, next){
res.render('mult'); //our html document
})
app.post('/profile', upload.single('avatar'), function (req, res, next) {
// req.file is the `avatar` file
console.log(req.file);
return false;
})
请确保您提供的图像和扩展名是 png 或 jpeg,或者您想要使用的任何内容,否则它不会被计算机视为图像。
更新你的问题
如果您想在不刷新页面的情况下向客户端显示图像,只需在客户端浏览器上使用 AJAX 和 get 请求即可。您可以将文件上传到您的 网络服务器 或 网络服务器 并从那里检索图像。比如我在Whosebug中的头像保存 here
您可以在获取请求中使用参数来接收来自服务器的所有文件。
例如,假设客户端向 /uploads/imageOfApet.png
发出获取请求。
app.get('/uploads/:theImageName', function(req, res){
console.log(req.params.theImageName); //returns the imageOfApet.png
var theName = req.params.theImageName; //imageOfApet.png
res.sendFile(__dirname + "/uploads/" + theName); //Sending the user the file
})