【问题标题】:Internal server error code 500 when uploading a file to a directory with Flask使用 Flask 将文件上传到目录时出现内部服务器错误代码 500
【发布时间】:2016-12-28 03:50:35
【问题描述】:

这是一个基本文件上传表单的后端 Flask 代码

@app.route('/gallery',methods=['GET','POST'])
def gallery():

error = None
if request.method == "POST":
    if 'file' not in request.files:
        flash("No file part")
        return redirect(request.url)

    file = request.files['file']
    print file
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
    flash('file uploaded successfully')

return render_template('gallery.html')

以及表单的 HTML 前端代码:

<div class="page">
    <h2>Gallery</h2>

    <p>Upload image</p>
    <form action="{{ url_for('gallery') }}" method="post"  enctype="multipart/form-data">
        <input type="file" name="file"><input type="submit">
    </form>

</div>

我将 UPLOAD_FOLDER 变量设置为项目根目录上的 /uploads 目录,我希望 Flask 在其中存储图像,但是每次我提交要上传的图像时都会收到 500 错误。

奇怪的是,如果我将文件上传到项目目录的根目录,我不会收到错误消息。仅当我将文件上传到上传目录时才会发生错误。

[编辑] 添加回溯

Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/Library/Python/2.7/sitea-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/fred/personalsite/cool_site.py", line 70, in gallery
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
  File "/Library/Python/2.7/site-packages/werkzeug/datastructures.py", line 2653, in save
    dst = open(dst, 'wb')
IOError: [Errno 2] No such file or directory: u'/uploads/Lecture 1.pages'

【问题讨论】:

  • 向我们展示您的追溯
  • 假设 app.config['UPLOAD_FOLDER'] 中有有效值并且您对该路径具有正确的访问权限...您的代码看起来不错,您可以在调试中运行它时告诉错误=真实案例
  • 对不起,我对此很陌生,我刚刚发现了如何使用调试器,就像 5 秒前一样。这是调试器错误: IOError: [Errno 2] No such file or directory: u'/uploads/Lecture 1.pages' Lecture 1.pages 当然是我尝试上传的文件的名称。

标签: python html file-upload flask server


【解决方案1】:

您的错误是该文件夹不存在。创建文件夹/uploads/ 并使其对程序可读。 如果文件夹应该与您的 Flask 目录相关,请使用 uploads/ 代替。

【讨论】:

  • 该目录确实存在。
  • 这很奇怪,因为除此之外它看起来是正确的。我唯一能想到的另一个问题是这是一个编码错误。您正在尝试将其保存在 Unicode 样式目录中,该目录可能与系统上的默认编码不同。尝试将 Unicode 转换为字符串,或者按照此处的示例进行操作:flask.pocoo.org/docs/0.11/patterns/fileuploads --> filename = secure_filename(file.filename) 也许这可以解决问题
  • 啊完美,我的意思是你的解决方案正是我的另一个猜测。
【解决方案2】:

我解决了这个问题。发生这种情况是因为我的 UPLOAD_FOLDER 变量被设置为 /uploads,而它本应设置为相对于 Flask 目录(uploads/)

【讨论】:

    猜你喜欢
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2014-04-12
    • 2020-02-02
    • 2016-11-23
    • 2013-07-06
    • 2017-01-16
    相关资源
    最近更新 更多