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