【问题标题】:Getting errors with os.listdir within flask and heroku在烧瓶和heroku中使用os.listdir出错
【发布时间】:2020-02-18 18:29:20
【问题描述】:

我有一个应用程序,它获取 url 并返回与其对应的文件。我想把它推到heroku上,但我收到了这个错误: **文件“/app/server.py”,第 1525 行,在 upload1 中

music = os.listdir(foldername)

FileNotFoundError: [Errno 2] 没有这样的文件或目录:'favicon.ico'**

然后我尝试在所有文件夹中添加 favicon.ico,我得到了

**文件“/app/server.py”,第 1525 行,在 upload1 中

music = os.listdir(foldername)

NotADirectoryError:[Errno 20] 不是目录:'favicon.ico'**

看起来挣扎的部分是


    @app.route('/<path:foldername>')
    def upload1(foldername):
        music = os.listdir(foldername)
        print(music)
        path_to_file = music[0]

        return send_file(
        foldername+"/"+path_to_file,
        mimetype="audio/mp3", 
        as_attachment=True, 
        attachment_filename=path_to_file )

【问题讨论】:

    标签: python flask heroku listdir


    【解决方案1】:

    您可以做的是,您必须在配置中设置UPLOAD_FOLDER 路径。

    UPLOAD_FOLDER = "your folder name" 然后你可以得到文件路径。

    file_path = os.path.abspath(os.path.join(app.config["UPLOAD_FOLDER"], filename))

    您可以从here获取更多信息

    【讨论】:

    • 我明白了,但是我如何在不知道文件名的情况下上传文件夹中的文件?问题是我不能使用 os.listdir。您的解决方案似乎必须知道我们要上传的文件的名称
    • 你检查过我分享的链接吗
    • 你知道文件夹名称吗?或者你在每个文件夹中搜索它?
    • 是的,我知道文件夹名称,但不知道其中的文件名。 (文件夹中只有一个文件)是的,我检查了链接,看起来它需要文件名和文件夹名。
    • 好的,您正在从路线中选择文件名,对吧?您的路线可能具有您提到的文件名`@app.route('/')`。所以现在你知道文件夹名和文件名了,那是什么问题
    【解决方案2】:
    @app.route('/<path:foldername>')
        def upload1(foldername):
            abs_path = os.path.abspath(foldername)
            music = os.listdir(abs_path)
            path_to_file = os.path.join(abs_path, music[0])
    
            return send_file(
            foldername+"/"+path_to_file,
            mimetype="audio/mp3", 
            as_attachment=True, 
            attachment_filename=path_to_file )
    

    它将首先从参数中获取文件夹名称,然后转换为绝对路径。 然后 listdir 将列出所有文件,然后它将从列表中获取第一个文件并加入路径。

    【讨论】:

    • @Falseee 我更新了答案,它会工作! :)。唯一的问题是您的文件夹应该在根目录中。
    • 是的 :) 我的也有,我只是忘记在 url 之后添加 /(myfilename) ...我太笨了。谢谢
    【解决方案3】:

    好吧,我现在感觉很笨。问题是当我打开heroku时,我立即得到了错误。但我明白了,因为我没有在 url 之后添加任何东西(所以代码显然不起作用)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-22
      • 2018-09-10
      • 1970-01-01
      • 2020-10-31
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      相关资源
      最近更新 更多