当前位置: 首页 > news >正文

如何传输文件流给前端

通过链接下载图片,直接http请求然后将文件流返回
注:music.ly是一个下载tiktok视频的免费接口 https://api19-core-c-useast1a.musical.ly/aweme/v1/feed/?aweme_id=xxx

func (m *FileBiz) DownloadFileV2(ctx *ctrl.Context, fileLink, fileName string) (err error) {// 记录下载日志record.BusinessLog(record.Debug, "RecordDownloadFileV2", fmt.Sprintf("filePath:%s,wsId:%s,email:%s", fileLink, ctx.GetString("ws_id"), ctx.GetString("email")), "")// 获取地址异常if fileLink == "" {err = errInfo.ErrFilesNullreturn}// 初始化request, err := http.NewRequest("GET", fileLink, nil)if err != nil {record.BusinessLog(record.Error, "NewRequest", fmt.Sprintf("filePath:%s", fileLink), err.Error())err = errInfo.ErrHttpInitreturn}// 执行请求clt := http.Client{}resp, err := clt.Do(request)if err != nil {record.BusinessLog(record.Error, "HttpDp", fmt.Sprintf("filePath:%s", fileLink), err.Error())err = errInfo.ErrHttpDoreturn}defer func(Body io.ReadCloser) {errClose := Body.Close()if errClose != nil {record.BusinessLog(record.Error, "FileClose", fmt.Sprintf("filePath:%s", fileLink), errClose.Error())}}(resp.Body)// 响应头ctx.Header("Content-Length", resp.Header.Get("Content-Length"))ctx.Header("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", fileName))ctx.Header("Content-Type", "application/octet-stream;charset=UTF-8")ctx.Header("Set-Cookie", "download=success; Domain=.media.io; Path=/;")// 响应流written, err := io.Copy(ctx.ResponseWriter(), resp.Body)if err != nil {record.BusinessLog(record.Error, "IoCopy", fmt.Sprintf("filePath:%s, written:%d", fileLink, written), err.Error())err = errInfo.ErrResponseWritten}return
}
http://www.lryc.cn/news/160752.html

相关文章:

  • Spring Security OAuth2 远程命令执行漏洞
  • Python之并发编程介绍
  • GO语言网络编程(并发编程)并发介绍,Goroutine
  • 英语连词总结
  • LeetCode 92. Reverse Linked List II【链表,头插法】中等
  • 【图论】Floyd
  • SpringCloudAlibaba Gateway(三)-整合Sentinel功能路由维度、API维度进行流控
  • 【笔试强训选择题】Day38.习题(错题)解析
  • DAY08_MyBatisPlus——入门案例标准数据层开发CRUD-Lombok-分页功能DQL编程控制DML编程控制乐观锁快速开发-代码生成器
  • 分光棱镜BS、PB、NPBS的区别
  • 人工智能论文通用创新点(一)——ACMIX 卷积与注意力融合、GCnet(全局特征融合)、Coordinate_attention、SPD(可替换下采样)
  • 您的计算机已被[new_day@torguard.tg].faust 勒索病毒感染?恢复您的数据的方法在这里!
  • 18--Elasticsearch
  • 代码随想录算法训练营 day59|503.下一个更大元素II、42. 接雨水
  • MyBatis数据库操作
  • python flask框架 debug功能
  • 《深入浅出OCR》第六章:OCR数据集与评价指标
  • 15. 线性代数 - 克拉默法则
  • 【LeetCode】剑指 Offer <二刷>(6)
  • jsp页面出现“String cannot be resolved to a type”错误解决办法
  • 【go-zero】使用自带Redis方法
  • 离线数仓同步数据3
  • Prometheus+Grafana 搭建应用监控系统
  • Spring Boot整合Log4j2.xml的问题
  • 代码随想录算法训练营第五十八天 | 739. 每日温度,496.下一个更大元素 I
  • 【动手学深度学习】--文本预处理
  • 2023年最佳研发管理平台评选:哪家表现出色?
  • 轻量容器引擎Docker基础使用
  • questions
  • MojoTween:使用「Burst、Jobs、Collections、Mathematics」优化实现的Unity顶级「Tween动画引擎」