【问题标题】:File Upload failing using flask使用烧瓶上传文件失败
【发布时间】:2018-07-26 17:37:48
【问题描述】:

我正在遵循在 Flask 中上传文件的确切教程,可在此处找到:http://flask.pocoo.org/docs/0.12/patterns/fileuploads/。 代码如下:

import os
from flask import Flask, flash, request, redirect, url_for
from werkzeug.utils import secure_filename

UPLOAD_FOLDER = '/my/file/path/uploads'
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

def allowed_file(filename):
    return '.' in filename and \
       filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
    # check if the post request has the file part
    if 'file' not in request.files:
        flash('No file part')
        return redirect(request.url)
    file = request.files['file']
    # if user does not select file, browser also
    # submit a empty part without filename
    if file.filename == '':
        flash('No selected file')
        return redirect(request.url)
    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        return redirect(url_for('uploaded_file',
                                filename=filename))
    return '''
<!doctype html>
<title>Upload new File</title>
<h1>Upload new File</h1>
<form method=post enctype=multipart/form-data>
  <p><input type=file name=file>
     <input type=submit value=Upload>
</form>
'''

奇怪的是,这很早以前就奏效了,非常好。我什至把它托管在 Heroku 上,我可以很好地上传文件。但是现在,我收到以下错误:

2018-07-26T17:28:36.126457+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/werkzeug/datastructures.py", line 2725, in save
2018-07-26T17:28:36.126455+00:00 app[web.1]: File "/app/app2.py", line 33, in upload_file
2018-07-26T17:28:36.126457+00:00 app[web.1]: file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
2018-07-26T17:28:36.126460+00:00 app[web.1]: dst = open(dst, 'wb')
2018-07-26T17:28:36.126515+00:00 app[web.1]: FileNotFoundError: [Errno 2] No such file or directory: '/my/file/path/uploads/file.png'

有人猜到为什么会这样吗?它以前工作得很好,但现在即使是 Flask 开发人员自己提供的代码也不能工作。我检查了很多文件路径,所以我知道问题不存在,并自行测试了 os.path.join,它运行良好。它似乎存在不保存的问题,特别是 file.save 本身。但除了 file.save 的问题之外,我不知道出了什么问题。 我仍在 Heroku 上运行它。似乎即使我上传文件并尝试继续执行代码,Heroku 也无法找到文件/访问我的目录?

任何帮助都会很棒!

【问题讨论】:

  • 事实证明,每当我尝试访问 python (3) 脚本中的文件时,它都会失败。但是当我运行完全相同的代码、文件路径和所有内容时,它在 python3 执行器中运行良好,我从python3 命令打开它。
  • 在我执行 conda update --all 之后,我的 loclhost 中也遇到了类似的问题。在我进行更新之前一切正常。

标签: python file flask save werkzeug


【解决方案1】:

我想通了。这是一个heroku 问题——heroku 文件是远程保存的,我可以通过运行heroku run bash 来访问这些文件。执行 ls 会显示完全不同的文件路径。修复所有内容以匹配那个文件路径,而不是我服务器的本地文件路径,修复它!

【讨论】:

    猜你喜欢
    • 2021-06-09
    • 1970-01-01
    • 2020-08-30
    • 2021-07-03
    • 1970-01-01
    • 2021-08-15
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多