我在网上浏览了一下,只获得了一些在测试代码中工作的方法,但从未在我的实际代码中使用过。我试图让用户以.jpg格式上传图像,然后我想稍后调用它来显示。这是我到目前为止所得到的。
fs = require("fs");
multer= require("multer");
app.use(multer({ dest: "./uploads/:id",
rename: function (fieldname, filename) {
return filename;
},
}));
然后从我正在使用的表单中提取文件:
image: req.body.image
至于将它放入数据库的代码我不确定,这是我提出的,但不太确定它是否可行。我也很无能把它放到我已经拥有的其他形式的更大的路线中。
这是小代码:
app.post("/api/photo",function(req,res){
var Startup = new Startup();
Startup.img.data = fs.readFileSync(req.files.userPhoto.path);
Startup.img.contentType = "image/jpg";
Startup.save();
});
这是表格其余部分的工作(图像除外)路线代码。
// CREATE add new startup to database
app.post("/startup-submit", function(req, res) {
// Get data from form
I create the variables here, removed as too much code and code for the image draw is above.
//Pass data through | Write better explaination later
var newStartup = {about_startup: about_startup, social_media: social_media, about_founder: about_founder};
Startup.create(newStartup, function(err, newlyCreatedStartup){
if(err){
console.log(err);
} else {
// Redirect back to show all page
res.redirect("/startups");
}
});
});
我知道小型和大型代码的路径路径没有对齐,但我正在使用它进行测试。
如何对此代码进行网格化和修复,以便允许我将图像/文件上传到我的数据库?
然后我怎么称它为使用EJS的src。它只是">这是我想出的最好的。我相信它远非正确。
答案 0 :(得分:0)
(1)dest
是存储文件的地方。 ./uploads/:id
看起来不是一个有效的目的地。
(2)你在哪里获得rename
选项?
(3)不要将实际图像存储在数据库中。只需存储文件名。
看起来应该更像
var fs = require("fs"),
multer = require("multer");
var upload = multer({
storage: multer.diskStorage({
destination: function (req, file, cb) {
// here is where you would add any extra logic to create directories
// for where you will upload your file
cb(null, './uploads')
},
filename: function (req, file, cb) {
// here is where you would add any extra logic to rename your file
cb(null, file.fieldname);
}
})
});
app.post("/api/photo", upload.single('fieldname'), function (req, res, next) {
// at this point, the file should have been uploaded
// you can get info about your file in req.file
console.log(req.file);
var startup = new Startup();
startup.img.data = req.file.filename;
startup.img.contentType = req.file.mimetype;
startup.save(function (err) {
if (err) return next(err);
// send response
});
});
如果您要创建目录,可能会发现fs-extra有用,特别是fs.mkdirs() /this/path/does/not/exist
。