小满nestjs(第十四章 nestjs 下载图片)

简介: 小满nestjs(第十四章 nestjs 下载图片)

下载文件的方式有好多种


1.download 直接下载


这个文件信息应该存数据库 我们这儿演示就写死 了


import { Controller, Post, UseInterceptors, UploadedFile, Get, Res } from '@nestjs/common';
import { UploadService } from './upload.service';
import { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express'
import type { Response } from 'express'
import {join} from 'path'
@Controller('upload')
export class UploadController {
  constructor(private readonly uploadService: UploadService) { }
  @Post('album')
  @UseInterceptors(FileInterceptor('file'))
  upload(@UploadedFile() file) {
    console.log(file, 'file')
    return '峰峰35岁憋不住了'
  }
  @Get('export')
  downLoad(@Res() res: Response) {
    const url = join(__dirname,'../images/1662894316133.png')
    // res
    // console.log(url)
    res.download(url)
    // return  true
  }
}


6cbc40ebf6a548d8add5ce70a6fb567c.png


2.使用文件流的方式下载


可以使用compressing把他压缩成一个zip包


import {zip} from 'compressing'


  @Get('stream')
  async down (@Res() res:Response) {
    const url = join(__dirname,'../images/1662894316133.png')
    const tarStream  = new zip.Stream()
    await tarStream.addEntry(url)
    res.setHeader('Content-Type', 'application/octet-stream');
    res.setHeader(
      'Content-Disposition',  
      `attachment; filename=xiaoman`,
    );
    tarStream.pipe(res)
  }


前端接受流


const useFetch = async (url: string) => {
  const res = await fetch(url).then(res => res.arrayBuffer())
  console.log(res)
  const a = document.createElement('a')
  a.href = URL.createObjectURL(new Blob([res],{
    // type:"image/png"
  }))
  a.download = 'xiaman.zip'
  a.click()
}
const download = () => {
  useFetch('http://localhost:3000/upload/stream')
}


6aa852a3ae604132b36a202907a88787.png

目录
相关文章
|
6月前
|
数据库
小满nestjs(第二十八章 nestjs 事务)
小满nestjs(第二十八章 nestjs 事务)
218 0
小满nestjs(第二十八章 nestjs 事务)
|
前端开发
小满nestjs(第十章 nestjs 提供者)
如果服务 之间有相互的依赖 或者逻辑处理 可以使用 useFactory
183 0
小满nestjs(第十章 nestjs 提供者)
|
中间件
小满nestjs(第十二章 nestjs 中间件)
中间件是在路由处理程序 之前 调用的函数。 中间件函数可以访问请求和响应对象
230 2
小满nestjs(第十二章 nestjs 中间件)
[Nestjs] 手摸手之简单封装API接口的返回结果
介绍:在 NestJs 中,你可以自定义一个统一的响应封装来支持成功、错误和分页响应。
286 0
小满nestjs(第十一章 nestjs 模块)
每个 Nest 应用程序至少有一个模块,即根模块。根模块是 Nest 开始安排应用程序树的地方。事实上,根模块可能是应用程序中唯一的模块,特别是当应用程序很小时,但是对于大型程序来说这是没有意义的。在大多数情况下,您将拥有多个模块,每个模块都有一组紧密相关的功能
136 0
小满nestjs(第十一章 nestjs 模块)
|
JavaScript API
小满nestjs(第十五章 nestjs 和 RxJs)
nterval 五百毫秒执行一次 pipe 就是管道的意思 管道里面也是可以去掉接口的支持处理异步数据 去处理数据 这儿展示 了 map 和 filter 跟数组的方法是一样的 最后 通过观察者 subscribe 接受回调
138 0
小满nestjs(第十五章 nestjs 和 RxJs)
|
开发框架 JSON JavaScript
小满nestjs(第一章 介绍nestjs)
Nestjs 是一个用于构建高效可扩展的一个基于Node js 服务端 应用程序开发框架并且完全支持typeScript 结合了 AOP 面向切面的编程方式
221 0
小满nestjs(第一章 介绍nestjs)
|
前端开发
小满nestjs(第九章 nestjs Session)
session 是服务器 为每个用户的浏览器创建的一个会话对象 这个session 会记录到 浏览器的 cookie 用来区分用户
329 0
小满nestjs(第九章 nestjs Session)
|
前端开发 测试技术 API
小满nestjs(第八章 nestjs 控制器)
小满nestjs(第八章 nestjs 控制器)
195 0
小满nestjs(第八章 nestjs 控制器)
|
中间件 数据安全/隐私保护
小满nestjs(第二十一章 nestjs 守卫)
守卫有一个单独的责任。它们根据运行时出现的某些条件(例如权限,角色,访问控制列表等)来确定给定的请求是否由路由处理程序处理。这通常称为授权。在传统的 Express 应用程序中,通常由中间件处理授权(以及认证)。中间件是身份验证的良好选择,因为诸如 token 验证或添加属性到 request 对象上与特定路由(及其元数据)没有强关联。
238 0
小满nestjs(第二十一章 nestjs 守卫)