图像文件未使用multer上传/创建

楚库玛·金斯利

我正在建立一个博客网站,除image upload上的以外,其他所有程序都工作正常Postpost工程100%,但是当我附上image它不会uploaded or created,我不知道我做错了,请我需要帮助。nodeexpress几个月前开始学习请帮我。

在index.js文件中

var multer = require('multer');
var upload = multer({dest: './uploads'});

const Schema = mongoose.Schema;
const ObjectId = Schema.ObjectId;

我的架构

const BlogPost = new Schema({
 author: ObjectId,
 title: String,
 body: String,
 profileimage: String,
 date: { type: Date, default: Date.now },
 comments: [{ type: Schema.Types.ObjectId, ref: 'Comment' }]
});
var Post = mongoose.model('Post', BlogPost);



router.post("/makepost", upload.single('profileimage'), (req, res) => {

 var myData = new Post(req.body);
 if(req.file) {
   console.log('Uploading File....');
   var profileimage = req.file.filename;
   console.log(profileimage)
 }else {
   console.log('No File Uploaded....');
  var profileimage = 'noimage.jpg';
 }
 myData.save()
 .then(item => {
 res.redirect('/posts');
})
.catch(err => {
 res.status(400).send("unable to save to database");
});
});

这是我的看法

<form action='/makepost' method='post' enctype="multipart/form-data">
 <p>Title: <input type='text' name='title' </p>
 <p>Content: <input type='text' name='body' </p>
 <div class="form-group"> <label>Profile Image</label><input class="form-control" 
   name="profileimage" type="file" />
 <p><input type='submit' value='post'></p>

EOL

由于您将multer与磁盘存储一起使用,因此您需要先从临时位置读取图像,然后再将其与猫鼬一起存储。此外,我会将猫鼬模式中的图片数据类型更改为buffer

这样的事情应该可以工作(请注意,我使用的是async / await而不是promise):

router.post("/makepost", upload.single('profileimage'), async (req, res) => {

    const newPost = new Post(req.body);
    if (req.file) {         
        const imgBuffer = await fs.promises.readFile(req.file.path); // TODO add error handling
        newPost.profileimage = imgBuffer;
    }
    try {
        await myData.save();
        res.redirect('/posts');
    }catch(err) {
        res.status(400).send("unable to save to database");
    }
});

// mongoose schema
...
profileimage: Buffer,
...

您还可以将图像存储为Base64编码的字符串,并将数据类型保留string在架构中。

编辑:

如评论中所述-将profileimage的数据类型改回string为profileimage将仅包含文件的路径。

router.post("/makepost", upload.single('profileimage'), async (req, res) => {

    const newPost = new Post(req.body);
    if (req.file) {         
        newPost.profileimage = req.file.path;
    }
    ...

添加一个快速中间件来提供图像,例如

app.use(express.static('./uploads'));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用来自不同输入字段的multer上传多个图像文件

来自分类Dev

使用multer上传图像文件时请求实体太大

来自分类Dev

如何使用Multipart上传图像文件?

来自分类Dev

如何使用axios上传图像文件?

来自分类Dev

使用 Selenium 上传图像文件

来自分类Dev

使用okhttp v3.2.0上传多个图像文件

来自分类Dev

如何使用FileReader API从url上传图像文件?

来自分类Dev

使用PHP将单个图像文件上传到FTP

来自分类Dev

使用Nightwatch.js上传图像文件

来自分类Dev

需要使用Curl上传JSON和图像文件

来自分类Dev

无法使用node.js / puppeteer上传图像文件

来自分类Dev

使用formData和Axios上传图像文件

来自分类Dev

使用PHP将单个图像文件上传到FTP

来自分类Dev

使用node.js预览上传的图像文件

来自分类Dev

使用okhttp v3.2.0上传多个图像文件

来自分类Dev

使用html和javascript上传图像文件返回fakepath

来自分类Dev

上传后图像文件大小增加

来自分类Dev

无法在EPiServersite中上传图像文件

来自分类Dev

Django图像文件上传的MultiValueDictKeyError

来自分类Dev

无法在EPiServersite中上传图像文件

来自分类Dev

用C ++上传图像文件

来自分类Dev

ServiceStack端点,用于上传图像文件

来自分类Dev

Django从模板上传图像文件

来自分类Dev

CakePHP3-上传图像文件

来自分类Dev

React - 如何上传图像文件

来自分类Dev

Java 不创建图像文件(使用 ImageIO)

来自分类Dev

Django 图像文件未呈现

来自分类Dev

使用multer在nodejs中上传图像后,json文件中的图像URL出现问题

来自分类Dev

使用PDO将图像位置上传到数据库,将图像文件上传到目录?