Flask-Uploads 即使没有约束也总是抛出 'UploadNotAllowed' 错误
Flask-Uploads always throwing 'UploadNotAllowed' error even with no constraints
Flask-uploads 有一个叫做 UploadSet
的东西,它被描述为 "single collection of files"。我可以使用此上传集将我的文件保存到预定义的位置。我已经定义了我的设置:
app = Flask(__name__)
app.config['UPLOADS_DEFAULT_DEST'] = os.path.realpath('.') + '/uploads'
app.config['UPLOADED_PHOTOS_ALLOW'] = set(['png', 'jpg', 'jpeg'])
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
# setup flask-uploads
photos = UploadSet('photos')
configure_uploads(app, photos)
@app.route('/doit', method=["POST"])
def doit():
myfile = request.files['file']
photos.save(myfile, 'subfolder_test', 'filename_test')
return ''' blah '''
这应该保存到 ./uploads/photos/subfolder_test/filename_test.png
我的测试图片是:2.6MB,是一个png文件。当我上传此文件时,出现错误:
...
File "/home/btw/flask/app.py", line 57, in doit
photos.save(myfile, 'subfolder_test', 'filename_test')
File "/usr/local/lib/python2.7/dist-packages/flaskext/uploads.py", line 388, in save
raise UploadNotAllowed()
UploadNotAllowed
但是它并没有明确说明什么是不允许的。我也尝试删除所有约束,但应用程序仍然会抛出此错误。为什么?
编辑:
好的,所以我发现实际上并不是导致问题的约束。导致问题的是子文件夹 and/or 文件名:
# This works
# saves to: ./uploads/photos/filename_test.png
photos.save(myfile)
但我想保存到我的自定义位置 ./uploads/photos/<custom_subdir>/<custom_filename>
。正确的做法是什么?
您还需要为 filename_test
提供扩展名
photos.save(myfile, 'subfolder_test', 'filename_test.png')
UploadSet
检查新文件名的扩展名,如果不允许新扩展名,将抛出异常。
由于您没有为新文件指定扩展名,它无法识别它。
您可以在文件名中添加一个点,然后将附加文件的扩展名。
photos.save(myfile, 'subfolder_test', 'filename_test' + '.')
save(storage, folder=None, name=None)
Parameters:
storage – The uploaded file to save.
folder – The subfolder within the upload set to save to.
name – The name to save the file as. If it ends with a dot, the file’s extension will be appended to the end.
Flask-uploads 有一个叫做 UploadSet
的东西,它被描述为 "single collection of files"。我可以使用此上传集将我的文件保存到预定义的位置。我已经定义了我的设置:
app = Flask(__name__)
app.config['UPLOADS_DEFAULT_DEST'] = os.path.realpath('.') + '/uploads'
app.config['UPLOADED_PHOTOS_ALLOW'] = set(['png', 'jpg', 'jpeg'])
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
# setup flask-uploads
photos = UploadSet('photos')
configure_uploads(app, photos)
@app.route('/doit', method=["POST"])
def doit():
myfile = request.files['file']
photos.save(myfile, 'subfolder_test', 'filename_test')
return ''' blah '''
这应该保存到 ./uploads/photos/subfolder_test/filename_test.png
我的测试图片是:2.6MB,是一个png文件。当我上传此文件时,出现错误:
...
File "/home/btw/flask/app.py", line 57, in doit
photos.save(myfile, 'subfolder_test', 'filename_test')
File "/usr/local/lib/python2.7/dist-packages/flaskext/uploads.py", line 388, in save
raise UploadNotAllowed()
UploadNotAllowed
但是它并没有明确说明什么是不允许的。我也尝试删除所有约束,但应用程序仍然会抛出此错误。为什么?
编辑:
好的,所以我发现实际上并不是导致问题的约束。导致问题的是子文件夹 and/or 文件名:
# This works
# saves to: ./uploads/photos/filename_test.png
photos.save(myfile)
但我想保存到我的自定义位置 ./uploads/photos/<custom_subdir>/<custom_filename>
。正确的做法是什么?
您还需要为 filename_test
提供扩展名
photos.save(myfile, 'subfolder_test', 'filename_test.png')
UploadSet
检查新文件名的扩展名,如果不允许新扩展名,将抛出异常。
由于您没有为新文件指定扩展名,它无法识别它。
您可以在文件名中添加一个点,然后将附加文件的扩展名。
photos.save(myfile, 'subfolder_test', 'filename_test' + '.')
save(storage, folder=None, name=None)
Parameters:
storage – The uploaded file to save.
folder – The subfolder within the upload set to save to.
name – The name to save the file as. If it ends with a dot, the file’s extension will be appended to the end.