以json格式将文件作为URL返回Rest Api

问题描述 投票:0回答:1

https://drive.google.com/file/d/1hxqXCTVZYRJheXNi-WFz8K2ksLZiMNTY/view?usp=drivesdk

我正在创建一个restfull api,用户从服务器上传和下载一些文件。我有一个系统,用户将一个文件(比如图像)上传到服务器。我已经成功地将该文件存储在monogo db gridfs中。

现在我想创建一个get请求,用户应该以上图中提到的方式获取文件。我不知道如何将文件作为字段发送。其中包含文件的url。

如果有可能,请指导我。非常感谢。我没有足够的声誉发布图片,所以我已经附加了驱动器链接。谢谢!

node.js mongodb rest api multer
1个回答
0
投票

好吧,所以经过近一周的时间我找到了解决方案。我正在寻找。我试图将用户显示图片作为url返回,这将是我们的api的单独端点。所以你可以轻松通过该网址获取图像。

所以我做的是我创建了一个用于身份验证的路由,其中​​我获得了包含文件名的请求的完整URL形式。验证方法处理验证系统,该验证系统将验证用户,然后将用户ID与完整URL一起传递给downloadimage方法,该url将仅查询用户的数据库并将urp分配给dp(显示图片)属性。图像将具有完整的端点以及文件的名称。我还附加了稍后处理图像URL的功能。

async function downloadImage(id, fullUrl) {
  let comUrl;
  let user = await User.findById(id).select('-hash');

  // console.log(user);
  if (user.dp) {

    comUrl = fullUrl + user.dp


  }

 function authenticate(req, res, next) {
 var fullUrl = req.protocol + '://' + req.get('host');
    let imageurl = await downloadImage(user.id, fullUrl);
        if (imageurl) {
          console.log(imageurl)
          userWithoutHash.dp = imageurl;

        }
}

router.get('/file/:filename', (req, res) => {

    gfs.model.readById(new mongoose.Types.ObjectId(req.params.filename), (err, file) => {

        console.log(file)
      // Check if file
      if (!file || file.length === 0) {
        return res.status(404)  .json({
          err: 'No file exists'
        });
      }
      const { Readable } = require('stream');
      // Check if image
      const stream = new Readable();
      stream.push(file);
      stream.push(null);

        stream.pipe(res);



    });
  });

输出:会是这样的

 { "dp": "http://localhost:4000/file/5cc0905839355d013c040794"}

如果有任何混淆或任何人需要帮助我请回答上述问题,让我知道谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.