【发布时间】: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