【问题标题】:How to save image url to mongodb and get it back如何将图像 url 保存到 mongodb 并取回
【发布时间】:2021-04-25 18:13:42
【问题描述】:

请我尝试发帖并从邮递员那里获取请求,这会将图像的路径保存到 mongodb 而不是二进制文件。 我成功地将包含表单数据(文本和文件)的数据发布到 mongodb,但该文件是一个缓冲区。我希望它是二进制数据,所以当我想取回它时,我不会得到二进制数据。 文本已成功发布,并且正在返回所需的文本,但图像正在发送二进制文件并且正在返回二进制文件,这是一个非常糟糕的主意。

我需要帮助。

//POST Request
app.post('/request', upload.single('images'), async function(req, res){
    const requestBody = {
        name: req.body.name,
        description: req.body.description,
        images: req.file.buffer
    }
    const request = new Request(requestBody)

    try{
        await request.save()
        res.status(201).send()

    }catch(e){
        res.status(400).send(e)
    }

})

//GET request
app.get('/request', async function(req, res){

    try{
        const requests = await Request.find({})
        // console.log(requests)
        res.send()

    }catch(e){
        res.status(500).send()
    }
})

【问题讨论】:

  • 您可以先将用户上传的内容存储在目录中,然后将其绝对路径存储在数据库中。
  • 部署到生产环境时本地目录@Hassan 会发生什么
  • 这就是问题所在,如果您只存储图像的 URL,那么您还需要机器上的图像。这意味着您的生产服务器应该有图像目录(然后将根据请求提供图像)。
  • 您认为还有哪些更好的方法可以实现这一点。 @哈桑
  • 这真的取决于。我最近实际上为一个项目存储了缓冲区。但是在这里寻找一个全面的答案stackoverflow.com/a/56419886/7660998

标签: node.js mongodb express postman


【解决方案1】:

您可以将文件路径保存在公用文件夹中,并在mongodb中使用字符串保存路径

您需要在公用文件夹中创建photos 文件夹并将其设置为静态

mkdir -p public/photos

然后就可以用 express static 注册路径了

app.use(express.static(__dirname, 'public'))

并将所需的路径保存在db中。在这里你应该使用存储在req.file.path中的文件的静态路径

const upload = require('multer')({ dest: path.join(__dirname, 'public/photos') })
app.post('/request', upload.single('images'), async function(req, res){
    const requestBody = {
        name: req.body.name,
        description: req.body.description,
        images: req.file.path
    }
    const request = new Request(requestBody)

    try{
        await request.save()
        res.status(201).send()

    }catch(e){
        res.status(400).send(e)
    }

})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 2021-04-07
    • 2011-12-09
    • 2019-11-21
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多