如何用Nodejs和Multer发布图片?

我正在尝试构build一个包含上传文件(如图像)并发布的应用程序。

这是我迄今为止所做的:

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); }); } 

现在在最后发布的请求中,我得到了关于'req.file'文件的所有元数据信息。 我想获取文件并发布,例如,如果有人提出这个请求:

 app.get('/postedfiles', function(req, res){}); 

我应该将它们保存在数据库中吗?

不是真的,它保存在您的计算机内,在您select的目录内。

这是multer上传的纯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> 

这是我们的后端代码。 在内部存储中,我select上传/upload目录下的文件,并给出当前时间的文件名。 我们声明了uploadvariables的设置,然后我们使用upload.single('avatar')当我们收到一个post请求,我们在callback之前声明它。 这里的什么avatar是从input标签中的HTML格式的文件名。 而在callback中,我们可以通过使用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即可。 您可以将file upload到Web服务器Web服务器,并从那里检索图像。 例如,我的个人资料图片在计算器保存在这里

您可以在获取请求中使用参数来接收来自服务器的所有文件。

例如,想象一个客户端向/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 })