3 回答
TA贡献1828条经验 获得超13个赞
我也遇到过这种问题。我还使用烧瓶和 send_file() 库将文件发送到 UI 以供用户下载。
我只是使用烧瓶发送文件,如下所示。
@app.run('/download_any_file',methods=['POST'])
def download():
path='folder_path_where_file_exist'
filename='abcde.xlsx' # i am getting this filename from UI
full_path=path+'/'+ filename
return send_file(full_path,as_attachment=True)
我从这个 API 得到了一些响应,但是 UI 由于某种原因无法使用这个响应。
添加了我在上面的代码中得到的响应片段:
在查看文档https://tedboy.github.io/flask/generated/flask.send_file.html后,我发现 excel 文件(.xlsx)或(.xls)的一个参数“mimetype”应该作为参数传递. 注意:(.xlsx 和 .xls)的 mimetype 不同,请按照此链接查找不同文件的 mimetype https://docs.microsoft.com/en-us/archive/blogs/vsofficedeveloper/office-2007-file-format -mime-types-for-http-content-streaming-2。
我最终改变了我的代码如下:
@app.run('/download_any_file',methods=['POST'])
def download():
path='folder_path_where_file_exist'
filename='abcde.xlsx' # i am getting this filename from UI
full_path=path+'/'+ filename
return send_file(full_path,as_attachment=True,mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
现在应该在 UI 端使用相同的 mime-type 来捕获和解码响应并将其放入 excel 文件中进行下载。在 UI 中 contentType 应该与烧瓶 send_file() contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' 中使用的 mimetype 相同;
这样你就可以下载一个excel文件。
TA贡献1840条经验 获得超5个赞
弄清楚了。我axios
用来处理我的POST
请求。似乎 javascriptPOST
请求没有返回文件的能力。
我通过返回'/path/to/file/spreadsheet.xlsx'
到我的 javascript as并使用该路径JSON
调用找到了一种解决方法。window.open()
然后我只需要创建一个标准的 FlaskGET
路由@bp.route('/path/to/file/<filename>)
,使用该send_file()
函数通过 url 从目录返回文件。
- 3 回答
- 0 关注
- 448 浏览
添加回答
举报