【问题标题】:Opening an uploaded photo in Flask在 Flask 中打开上传的照片
【发布时间】:2020-04-22 17:24:29
【问题描述】:

我正在尝试将上传到我的 Flask 网站的照片发送到 S3 存储桶。我遇到的问题是FileNotFoundError: [Errno 2] No such file or directory: 'myPic.JPG'。如何访问(然后打开)用户刚刚输入表单的文件(特别是图像)?我可以成功使用photos.save(x),那么是什么阻止我使用open()

photos = UploadSet('photos', IMAGES)

@application.route("/upload", methods=['GET', 'POST'])
@login_required
def upload():
    form = UploadForm()
    uploaded_files = request.files.getlist("photo")
    if form.validate_on_submit():
        for w in uploaded_files:
            with open(w.filename) as file_up:
                conn.upload_fileobj(file_up, bucket_name, 'gallery/fulls/'+filename)

追溯

Traceback (most recent call last):
  File "/Users/senrab/Desktop/sdchapel.org/env/lib/python3.7/site-packages/flask/app.py", line 2328, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/senrab/Desktop/sdchapel.org/env/lib/python3.7/site-packages/flask/app.py", line 2314, in wsgi_app
    response = self.handle_exception(e)
  File "/Users/senrab/Desktop/sdchapel.org/env/lib/python3.7/site-packages/flask/app.py", line 1760, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/senrab/Desktop/sdchapel.org/env/lib/python3.7/site-packages/flask/_compat.py", line 36, in reraise
    raise value
  File "/Users/senrab/Desktop/sdchapel.org/env/lib/python3.7/site-packages/flask/app.py", line 2311, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/senrab/Desktop/sdchapel.org/env/lib/python3.7/site-packages/flask/app.py", line 1834, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/senrab/Desktop/sdchapel.org/env/lib/python3.7/site-packages/flask/app.py", line 1737, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/senrab/Desktop/sdchapel.org/env/lib/python3.7/site-packages/flask/_compat.py", line 36, in reraise
    raise value
  File "/Users/senrab/Desktop/sdchapel.org/env/lib/python3.7/site-packages/flask/app.py", line 1832, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/senrab/Desktop/sdchapel.org/env/lib/python3.7/site-packages/flask/app.py", line 1818, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/senrab/Desktop/sdchapel.org/env/lib/python3.7/site-packages/flask_login/utils.py", line 261, in decorated_view
    return func(*args, **kwargs)
  File "/Users/senrab/Desktop/sdchapel.org/app/routes.py", line 306, in upload
    with open(w.filename) as file_up:
FileNotFoundError: [Errno 2] No such file or directory: 'P8044182.JPG'

编辑:

我稍微编辑了函数,我认为我更接近答案:

新功能

photos = UploadSet('photos', IMAGES)

@application.route("/upload", methods=['GET', 'POST'])
@login_required
def upload():
    form = UploadForm()
    uploaded_files = request.files.getlist("photo")
    if form.validate_on_submit():
        for w in uploaded_files:
            # HERE IS THE ALTERATION:
            with open(w.stream.read()) as file_up:
                conn.upload_fileobj(file_up, bucket_name, 'gallery/fulls/'+filename)

追溯

File "/Users/senrab/Desktop/sdchapel.org/app/routes.py", line 307, in upload
    with open(w.stream.read()) as file_up:
ValueError: embedded null byte

我猜这意味着我必须改变打开文件的方式?

【问题讨论】:

  • 本地目录下能看到上传的文件吗?
  • 如果您添加异常的整个堆栈跟踪将非常有帮助。
  • UploadSet 将文件保存到特定文件夹(查看此处:flask.palletsprojects.com/en/1.1.x/patterns/fileuploads)您是否尝试使用文件夹 + 文件名来访问文件?
  • 我曾尝试使用文件夹 + 文件名,但这导致了同样的错误。我已经编辑了这个问题,我认为功能稍有变化,让我更接近上传文件。

标签: python flask amazon-s3 upload


【解决方案1】:

消除with open(...)就可以成功上传图片了。

photos = UploadSet('photos', IMAGES)

@application.route("/upload", methods=['GET', 'POST'])
@login_required
def upload():
    form = UploadForm()
    uploaded_files = request.files.getlist("photo")
    if form.validate_on_submit():
        for w in uploaded_files:
            conn.upload_fileobj(file_up, bucket_name, 'gallery/fulls/'+filename)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2016-01-12
    • 2014-03-04
    • 2017-12-09
    • 2014-09-18
    相关资源
    最近更新 更多