【问题标题】:Returning the file as a url in json format RestApi将文件作为 url 以 json 格式返回 Rest Api
【发布时间】:2019-04-25 00:52:25
【问题描述】:

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

我正在创建一个 restfull api,用户可以在其中从服务器上传和下载一些文件。 我有一个系统,用户正在将文件(比如说图像)上传到服务器。通过将该文件存储在 monogo db gridfs 中,我已成功完成此操作。

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

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

【问题讨论】:

  • 当然可以,但是我没有包含任何代码的原因是我不知道如何在 node.js 中下载带有 rest 的文件。我只知道下载文件的文件保护程序

标签: node.js mongodb rest api multer


【解决方案1】:

好的,所以将近一周后,我找到了解决方案。我一直在寻找。 我试图将用户显示图片作为 url 返回,这将是我们 api 的单独端点。这样您就可以通过该 url 轻松获取图像。

所以我所做的是我创建了一个用于身份验证的路由,在该路由中我从包含文件名的请求中获取完整的 url。身份验证方法处理身份验证系统,该系统将对用户进行身份验证,然后将用户 ID 与完整 url 一起传递给 downloadimage 方法,该方法将只查询用户的数据库并将 dp(显示图片)属性分配给 url图像将具有完整的端点以及文件名。我还附加了稍后处理图像 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"}

如果有任何困惑或任何人需要帮助,请告诉我,谢谢!

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多