当前位置: 首页 > 知识库问答 >
问题:

用Flask上传和下载文件

戚衡
2023-03-14

我试图用PythonAnywhere和Flask编写一个非常简单的webapp,它允许用户上传文本文件,生成csv文件,然后让用户下载csv文件。不一定要花哨,只要管用就行了。我已经编写了从驱动器上的txt文件生成csv的程序。

现在,我的函数用以下命令打开驱动器上的文件:

with open(INPUTFILE, "r") as fname:
with open(OUTPUTFILE, 'w') as fname:

共有1个答案

狄凯
2023-03-14

这里有PythonAnywhere开发程序。这是一个关于Flask和web开发的很好的问题,而不是针对我们的系统,所以我将尝试给出一个通用的答案,而不是针对我们的:-)

为了给你的问题一个明确的答案,我需要知道一些事情,所以我首先列出我所做的假设--如果我对其中任何一个假设有错误,请给我一个评论,我会适当地更新答案。

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

如果这两种情况都是这样,那么构造Flask应用程序的最好方法就是处理Flask中的所有内容。一个代码示例胜过千言万语,所以我把这个简单的示例放在一起,它允许用户上传一个文本文件,通过一个名为transform的函数运行它(转换程序的函数将在这个函数中插入--我的函数只是在整个文件中用替换=

from flask import Flask, make_response, request

app = 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().decode("utf-8")

    result = transform(file_contents)

    response = make_response(result)
    response.headers["Content-Disposition"] = "attachment; filename=result.csv"
    return response

关于你的其他问题:

  • templates:我没有在这个示例中使用模板,因为我希望所有的模板都适合于一段代码。如果我做得很好,那么我会把表单视图生成的东西放入模板中,但仅此而已。
  • 可以通过写入文件来实现吗?是的,可以通过使用fileName对象上的save(fileName)方法来保存上传的文件,我使用的是stream对象的stream属性。但是,如果您的文件非常小(根据我上面的假设),那么像上面的代码那样在内存中处理它们可能更有意义。

我希望这一切都有帮助,如果你有任何问题,请留下评论。

 类似资料:
  • 我需要创建一个从APIendpoint下载文件并将其上传到另一个APIendpoint的进程。该文件的最大大小为100MB,但我们将有许多进程并行运行。我试图用Spring WebClient实现它,而不需要将文件存储在内存中。当前代码将文件存储在内存中,因为使用大文件的测试会抛出OutofMemoryError。

  • 问题内容: 我正在尝试使用Flask创建一个Web应用程序,该应用程序允许用户上传文件并将其提供给其他用户。现在,我可以将文件正确地上传到upload_folder了。但是我似乎找不到找到让用户下载回来的方法。 我将文件名的名称存储到数据库中。 我有一个为数据库对象服务的视图。我也可以删除它们。 在我的HTML中,我有: 和下载视图: 但它正在返回: 未找到 在服务器上找不到请求的URL。如果您手

  • 本文向大家介绍详解SpringBoot文件上传下载和多文件上传(图文),包括了详解SpringBoot文件上传下载和多文件上传(图文)的使用技巧和注意事项,需要的朋友参考一下 最近在学习SpringBoot,以下是最近学习整理的实现文件上传下载的Java代码: 1、开发环境: IDEA15+ Maven+JDK1.8 2、新建一个maven工程:   3、工程框架   4、pom.xml文件依赖项

  • 在Flask中处理文件上传非常简单。 它需要一个enctype属性设置为的HTML表单,将该文提交到指定URL。 URL处理程序从对象中提取文件并将其保存到所需的位置。 每个上传的文件首先保存在服务器上的临时位置,然后再保存到最终位置。 目标文件的名称可以是硬编码的,也可以从对象的属性中获取。 但是,建议使用函数获取它的安全版本。 可以在Flask对象的配置设置中定义默认上传文件夹的路径和上传文件

  • 本文向大家介绍springboot实现文件上传和下载功能,包括了springboot实现文件上传和下载功能的使用技巧和注意事项,需要的朋友参考一下 spring boot 引入”约定大于配置“的概念,实现自动配置,节约了开发人员的开发成本,并且凭借其微服务架构的方式和较少的配置,一出来就占据大片开发人员的芳心。大部分的配置从开发人员可见变成了相对透明了,要想进一步熟悉还需要关注源码。 1.文件上传

  • 本文向大家介绍php文件上传、下载和删除示例,包括了php文件上传、下载和删除示例的使用技巧和注意事项,需要的朋友参考一下 php文件上传、下载和删除示例大体思路如下,具体内容如下 一.文件上传 1.把上传文件的区域做出来 div1 2.把显示文件的区域做出来 div2 3.提交表单,上传文件 4.服务器接收文件数据 用$_FILE[name]接收 5.处理数据,看上传文件是否有错误 错误有如下几