NestJS 从 GridFS 返回一个文件

2024-02-08

我正在尝试使用 Nest 控制器从 GridFS 返回文件。据我所知 Nest 不尊重我的习惯content-type我设置的标题application/zip,因为我在返回时收到文本内容类型(参见屏幕截图)。

响应数据图像,错误的内容类型标头 https://i.stack.imgur.com/AmD3p.png

我的巢控制器看起来像这样

  @Get(':owner/:name/v/:version/download')
  @Header('Content-Type', 'application/zip')
  async downloadByVersion(@Param('owner') owner: string, @Param('name') name: string, @Param('version') version: string, @Res() res): Promise<any> {
    let bundleData = await this.service.getSwimbundleByVersion(owner, name, version);
    let downloadFile = await this.service.downloadSwimbundle(bundleData['meta']['fileData']['_id']);   
    return res.pipe(downloadFile);
  }

这是服务电话

downloadSwimbundle(fileId: string): Promise<GridFSBucketReadStream> {
      return this.repository.getFile(fileId)
    }

这本质上是对此的传递。

  async getFile(fileId: string): Promise<GridFSBucketReadStream> {
    const db = await this.dbSource.db;
    const bucket = new GridFSBucket(db, { bucketName: this.collectionName });
    const downloadStream = bucket.openDownloadStream(new ObjectID(fileId));

    return new Promise<GridFSBucketReadStream>(resolve => {
        resolve(downloadStream)
      });
  }

我的最终目标是打电话给download端点并让浏览器注册它是一个 zip 文件并下载它,而不是在浏览器中查看二进制文件。任何关于需要做什么才能实现这一目标的指导将不胜感激。谢谢阅读


您还需要设置Content-Disposition带有文件名的标头。您可以使用@Header()装饰器,如果文件名始终相同或setHeader如果您需要能够根据控制器中的某些参数发回不同的文件名,请直接在响应对象上。

以下两个示例控制器方法都用于将可下载文件从本地文件系统发送回浏览器。

@Get('/test')
@Header('Content-Type', 'application/pdf')
@Header('Content-Disposition', 'attachment; filename=something.pdf')
getTest(@Res() response: Response) {
   const data = createReadStream(path.join(__dirname, 'test.pdf'));
   data.pipe(response);
}

@Get('/test')
@Header('Content-Type', 'application/pdf')
getTest(@Res() response: Response) {
   const data = createReadStream(path.join(__dirname, 'test.pdf'));

   response.setHeader(
     'Content-Disposition',
     'attachment; filename=another.pdf',
   );

   data.pipe(response);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NestJS 从 GridFS 返回一个文件 的相关文章

随机推荐

  • 运行时错误 91 未设置对象变量或 With 块变量 - 使用公共变量

    我目前正在开展一个项目 该项目整合了许多工作簿中的信息 虽然应用程序的第一个版本使用Select and Activate从我在本网站上看到的信息来看 应该尽可能避免使用这些方法 因此 我目前正在重新修改代码以尽可能消除这些问题 我正在使用
  • 仅通过 CSS 定位 IE9 [重复]

    这个问题在这里已经有答案了 只是想知道我的技巧包里有这些 IE 黑客 9 for IE8 and below for IE7 and below for IE6 即例如 body border 2px solid blue border 2
  • 您可以从另一台服务器发送 HTTP 响应吗?

    也许是愚蠢的问题 我最近一直在玩 Node js 喜欢设置服务器和发出请求等是多么容易 我还没有尝试过 但想知道如何将数据从一个请求转发到另一台服务器 并有第二个服务器向客户端发送响应 这可能吗 i e 客户端 gt 服务器 A gt 服务
  • 无法撤消子元素的文本装饰

    假设你有这个 html a href This is underlined span This isn t span a 还有这个CSS a hover text decoration underline I know this is en
  • 如何从字符串列表创建多个变量? [复制]

    这个问题在这里已经有答案了 我有一个字符串列表 例如 names apple orange banana 我想为列表中的每个元素创建一个列表 该列表的名称与字符串完全相同 apple orange banana 我怎样才能在Python中做
  • 如何使用实验说明符分辨率=节点运行node.js cli?

    我们的团队构建了一个用于维护的小型 CLI package json 指定了一个路径bin财产 一切都运转良好 bin eddy dist src cli entry js 自动完成是通过使用实现的 email protected cdn
  • Mongoose,如何清空集合

    我有以下 hapi js 服务器 const Hapi require hapi const Mongoose require mongoose const Wreck require wreck const server new Hapi
  • 如何修复 SOAPUI 中不支持的主次版本 52.0

    我正在 SOAPUI 中使用 groovy 脚本测试步骤运行 selenium 脚本 但出现以下错误 如何解决这个问题 java lang UnsupportedClassVersionError org openqa selenium s
  • 显示grafana点悬停的详细信息

    我使用 Influxdb 作为 grafana 的来源 在每个数据点的时间序列上 我有几个值和标签 如何将鼠标悬停在折线图中的特定数据点上显示相关数据点 或者 我可以调用一些 API 传递一些值来填充悬停时出现的工具提示 截至撰写本文时 还
  • URL 编码——& 符号问题

    我在某些字符编码方面遇到了一些问题 导致我网站上的搜索表单出现了一些问题 可能的字段值之一包含一个 符号 选择此选项并提交搜索后 符号将编码为 2526 使用页面底部的分页链接并导航到结果列表中的第二页时 符号将被编码为 26 最后 在尝试
  • JavaScript:以整数形式读取 3 个字节缓冲区

    假设我有一个十六进制数据流 我想将其分为 3 字节块 我需要将其作为整数读取 例如 给定一个十六进制字符串01be638119704d4b9a我需要读取前三个字节01be63并将其读取为整数114275 这就是我得到的 var sample
  • xcode 5:代码签名身份列表不完整

    刚刚更新并使用 xcode 5 来升级我的应用程序的第二个版本 但现在的问题出在代码签名身份上 当我打开 xcdoe 4 5 中的旧文件时 我会看到我的身份的完整列表 但在这个新项目中 只列出了一个开发人员身份 其余的 开发者和发行版 身份
  • 链接链接静态库中符号的动态库:macOS 与 Linux

    我正在将一个 Linux 应用程序移植到 macOS 链接行为存在差异 我花了一些时间才发现它的差异 该项目使用基于 CMake 的两阶段构建过程 一个 CMake 树创建一个动态库 该动态库链接到稍后创建的第二个树中创建的静态库 创建动态
  • 如何使用 Mathematica 查找 Waldo?

    这周末困扰着我 有什么好方法来解决这些问题沃尔多在哪里 https en wikipedia org wiki Where 27s Wally 3F Wally 北美以外 谜题 使用 Mathematica 图像处理和其他功能 这是我到目前
  • 如何对 Jekyll 扩展或插件进行猴子修补?

    我想重写一个 gem 方法 Jekyll 扩展 如下所示 File lib jekyll amazon amazon tag rb https github com tokzk jekyll amazon blob 8fd9d9ff676e
  • Git 添加预提交钩子而不是提交的暂存文件

    我编写了一个预提交挂钩来编译我的项目并将生成的文件添加到提交中 这是一个 JavaScript 项目 我使用的是 husky 但我也尝试过编辑 git hooks pre commit 但该文件没有添加到提交中 如果我取消提交 我可以看到文
  • 更新按钮触发编辑事件处理程序

    我有一个网格视图 标记是这样的
  • Expression.Coalesce的转换参数有什么用?

    有关此问题的背景 请参阅Expression Coalesce 方法的 Coalesce Expression Expression LambdaExpression 重载的文档 https learn microsoft com en u
  • 检测用户滚动了多少

    我的网站上有图像弹出功能 以便当用户单击页面上的较小版本时向用户显示完整分辨率的图片 这是当前的CSS它的定位是 div enlargedImgWrapper position absolute top 30px left 55px z i
  • NestJS 从 GridFS 返回一个文件

    我正在尝试使用 Nest 控制器从 GridFS 返回文件 据我所知 Nest 不尊重我的习惯content type我设置的标题application zip 因为我在返回时收到文本内容类型 参见屏幕截图 响应数据图像 错误的内容类型标头