python - Python Flask,从服务器下载文件
问题描述
我创建了一个 Web 应用程序,它允许其用户从运行该应用程序的同一台服务器下载文件。但是,我无法让它按照我想要的方式工作,现在我什至不确定它是否可能。
所以,我有一个表单,其中包含两个用户输入和一个“下载”按钮。第一个用户输入让您选择文件,第二个用户输入让您选择数量。当您点击下载按钮时,应用程序会根据用户输入创建一个 zip 文件,并尝试将其发送给用户。无论如何,zip 文件永远不会发送给用户。
这是按钮在 html 中的样子
<input type="submit" name="submit" value="Download" class="btn" >
下面是send_file()
应用程序中的函数调用。
send_file(uploads + cfg_zipfile, attachment_filename=cfg_zipfile, as_attachment=True)
该函数返回状态 200,因此它似乎正在工作。仍然没有发送文件,但文件存在于服务器上。那么,这甚至可以这样做吗?我知道我可以使用按钮创建 zip 文件,然后会出现一个下载链接,用户可以从该链接下载它,但是是否可以通过一个按钮获得所有这些功能?目前 zip 文件的名称还取决于用户输入(选择的文件和数量)。
解决方案
我认为你应该创建一个服务
<button ng-show='downloadReportview' data-toggle="modal" class="btn btn-success glyphicon glyphicon-download">
<a href="http://{{location}}/api/xx/xxxx//{{costDataReportName}}" download>Download Report</a>
</button>
这将使用 GET 方法调用服务。python中的服务看起来像这样:
def get(self, filename):
# RETURN THE INVOICE
file_name = str(expanduser("~")) + UPLOAD_PATH + str(filename)
f = open(file_name, "rb")
output = f.read()
self.set_header('Content-Disposition', 'attachment; filename=output.csv')
self.set_header('Content-type', 'text/csv')
self.write(output)
print("Invoice download")
推荐阅读
- language-agnostic - 允许调度程序切换正在执行的线程的机制是什么?
- html - 引导模式“页面”
- php - PHP SimpleXML 跳过第一个元素
- python - 如何使用 selenium 登录包含 iframe 的网站?
- php - 如何将本地 Laravel 项目移动到 AWS 服务器?
- azure - Azure Cosmos db 和函数 javascript sdk - 如何异步读取文档?
- angular - 纯 rxjs if/else 语句未通过合并到达 else 语句
- azure-devops - 如何在 Azure DevOps (VSTS) 中预览 PowerPoint 文件?
- perl - 如何使用 format_cldr("LLL") 打印首字母大写的月份名称
- sql - 在对象“View_CMS_Tree_Joined”上提示“noexpand”