flask后端+vue前端——后端怎么发文件给前端?

首先,前端axios请求的responseType要设置为blob

javascript 复制代码
const service = axios.create({
    baseURL: 'http://127.0.0.1/api',
    timeout: 5000
    });

 //向后端发送数据,后端根据这个数据data生成文件返回
 send_coordinate(data){
        return service.post('/',data,{responseType: 'blob'});
 }

然后,后端要返回文件字节流

javascript 复制代码
from flask import Flask,Response


@app.route('/', methods=['POST'])
def coordinate():
    res = request.form['data'] # 取前端数据

    # 保存为txt文件
    with open("1.txt", 'w', encoding='utf-8') as f:  
       f.write(data) 
    
    # 以字节方式读取
    with open(filename, 'rb') as f:
        bytes_data = f.read()
    
    # 用Response对象构造返回值,需要指定文件类型
    return Response(bytes_data, mimetype="text/plain")

接着,前端在axios的then中,把res.data转为Blob对象,然后创建URL,赋值给a标签的href属性

javascript 复制代码
user.send_coordinate(formData)
    .then(res=>{
                            
       let blob = new Blob([res.data], {type: 'text/plain'}); //这一步是关键
       this.downloadURL=URL.createObjectURL(blob) // 生成临时URL,赋值给变量
       this.filedownload=true // 标记变量,显示a标签(下载链接)
                           
     })

最后,a标签与vue变量如下

html 复制代码
<a v-if="filedownload" :href="downloadURL" download="coordinate.txt">下载轨迹文件</a>
javascript 复制代码
export default {
    name: 'PickTrack',
    data() {
        return {
            filedownload:false,   //是否有文件可下载
            downloadURL:''        //临时下载链接
        }
    },
相关推荐
天道kabuto6 分钟前
踩坑实录:JS Map迭代器为什么“用完即焚”?兼谈技术知识沉淀
前端
字节跳动开源9 分钟前
VisActor全新图可视化开源项目:VGraph
前端·设计模式·开源
打呵欠的猫11 分钟前
前端接口超时从 15s 改到动态值后,用户投诉降了 60%——AI 帮我分析出的方案
前端·ai编程
岁月宁静11 分钟前
二、《从零手撸 Agent》 — 聊聊 LLM 的失忆真相
前端·python·agent
郭邯19 分钟前
用纯前端实现一个代码压缩美化工具,我踩了这三个坑
前端
用户2832096793721 分钟前
从进程线程到 async/await:JS Event-loop事件循环机制底层解析
前端·javascript
岁月宁静30 分钟前
一、《从零手撸 Agent》 我用 10 行代码跑通了第一次大模型调用(顺便踩了 4 个坑)
前端·python·agent
计算机魔术师1 小时前
Fable 5.1 来了,智能体任务成本降 45%——Anthropic 这次为何降价这么狠
前端
Csvn1 小时前
现代 CSS 新特性深度:container query、:has()、@scope 与 subgrid
前端
计算机魔术师1 小时前
Anthropic 自己承认:模型越来越难管住了
前端