FastAPI和VUE3实现文件下载

FastAPI和VUE3实现文件下载

用到这些了,记录一下。其他文章要么过时了,要么不全。

前端

const exportReport = () => {
  const rxnList = []
  state.tableData.map((item) => {
    rxnList.push({stepId: item.stepId, procedure: item.procedureTxt})
  })
  const data = JSON.stringify({projectName: projectName.value})
  axios.post('http://127.0.0.1:8800/api/finalExport', data, {
    responseType: 'blob', // 重要:设置响应类型为 blob
  }).then(async (response) => {
    if (response.status === 200) {
      // 将文件转换为 Blob
      const blob = new Blob([response.data], {type: 'application/octet-stream'});

      // 创建一个链接并设置下载属性
      const link = document.createElement('a');
      link.href = window.URL.createObjectURL(blob);
      link.download = projectName.value + 'draft.docx';

      // 模拟点击下载链接
      link.click();
    } else {
      alert('从后端downloadfile目录里下载此文件失败.');
    }
  }).catch((error) => {
    console.log(error)
  })
}

后端

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import FileResponse

from pydantic import BaseModel


app = FastAPI()
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 允许的源,这里假设你的前端应用运行在 8080 端口
    allow_credentials=True,
    allow_methods=["*"],  # 允许所有方法
    allow_headers=["*"],  # 允许所有头
)

class ProjectDetails(BaseModel):
    projectName: str
    
@app.post("/api/eln/finalExport")
def final_export(p: ProjectDetails):
    file_path, filename = gen_new_docx(p.projectName)	# 生成文件的函数
    return FileResponse(file_path, media_type="application/octet-stream", filename=filename)


if __name__ == '__main__':
    uvicorn.run(app='indigo_runner:app', host="0.0.0.0", port=8067, reload=True)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值