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