在 Flask 中打开上传的照片

Opening an uploaded photo in Flask

我正在尝试将上传到我的 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

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

通过消除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)