使用Flask上传和下载文件

使用Flask上传和下载文件,第1张

使用Flask上传和下载文件

这里的PythonAnywhere开发人员。总的来说,这是关于Flask和Web开发的一个好问题,而不是特定于我们的系统,因此,我将尝试给出一个通用的答案,而无需任何特定于我们的内容:-)

为了确定您的问题,我需要知道几件事,因此,我将从列出我正在做的假设入手-如果我对任何假设有误,请给我评论。我将适当地更新答案。

  • 我假设您要上传的文件不是很大,并且可以容纳合理的内存量-假设小于一兆字节。
  • 我假设您已经编写了从文本文件生成CSV的程序,并且该程序具有(或者可能更容易更改为具有)一个函数,该函数需要包含以下内容的字符串:文本文件的内容,并返回需要写入CSV的内容。

如果同时存在这两种情况,那么构造Flask应用程序的最佳方法就是处理Flask中的所有内容。一个代码示例值一千个单词,因此,我整理了一个简单的示例,允许用户上传文本文件,并通过一个名为的函数运行它

transform
(这是转换程序中的函数插入的位置-
我的替换
=
,
整个文件),然后将结果发送回浏览器。
在PythonAnywhere上有此应用程序的实时版本。

from flask import Flask, make_response, requestapp = Flask(__name__)def transform(text_file_contents):    return text_file_contents.replace("=", ",")@app.route('/')def form():    return """        <html> <body>     <h1>Transform a file demo</h1>     <form action="/transform" method="post" enctype="multipart/form-data">         <input type="file" name="data_file" />         <input type="submit" />     </form> </body>        </html>    """@app.route('/transform', methods=["POST"])def transform_view():    request_file = request.files['data_file']    if not request_file:        return "No file"    file_contents = request_file.stream.read().depre("utf-8")    result = transform(file_contents)    response = make_response(result)    response.headers["Content-Disposition"] = "attachment; filename=result.csv"    return response

关于您的其他问题:

  • 模板:在本示例中,我没有使用模板,因为我希望所有模板都可以放入单个代码中。如果我做得正确,则可以将
    form
    视图生成的内容放入模板中,仅此而已。
  • 您可以通过写入文件来做到这一点吗?是的,可以,并且可以使用我正在使用属性的对象上的
    save(
    filename
    )
    方法保存上载的文件。但是,如果您的文件很小(按照我上面的假设),那么像上面的代码那样在内存中处理它们可能更有意义。
    file``stream

希望对您有所帮助,如果您有任何疑问,请发表评论。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5649429.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存