Python Flask上载:如何按内容(而不仅仅是扩展名)强制执行文件类型

Python Flask上载:如何按内容(而不仅仅是扩展名)强制执行文件类型,python,flask,flask-uploads,Python,Flask,Flask Uploads,我使用Flask Uploads在web应用程序中处理图像上传。web应用程序只接受JPEG图像,但Flask上载似乎只是通过检查文件扩展名来实现这一点 例如,我可以通过将文件名从myfile.txt更改为myfile.jpg轻松地颠覆这一点,而文本文件myfile.txt将被错误地接受为JPEG图像 我如何确保上传到我的web应用程序的文件实际上是按内容而不仅仅是按文件扩展名的JPEG文件 下面是一个最小的实现(不包括模板),演示了我要做的事情: 初始化 从烧瓶进口烧瓶 从flask_uplo

我使用Flask Uploads在web应用程序中处理图像上传。web应用程序只接受JPEG图像,但Flask上载似乎只是通过检查文件扩展名来实现这一点

例如,我可以通过将文件名从
myfile.txt
更改为
myfile.jpg
轻松地颠覆这一点,而文本文件
myfile.txt
将被错误地接受为JPEG图像

我如何确保上传到我的web应用程序的文件实际上是按内容而不仅仅是按文件扩展名的JPEG文件

下面是一个最小的实现(不包括模板),演示了我要做的事情:

初始化
从烧瓶进口烧瓶
从flask_uploads import UploadSet,配置_uploads、图像
从配置导入配置
app=烧瓶(名称)
app.config.from_对象(config)
照片=上传集(“照片”,图像)
配置上传(应用程序、照片)
从应用程序导入路由
#routes.py
导入操作系统
从flask导入重定向,呈现模板,从目录发送,url
从烧瓶上传导入上传不允许
从应用程序导入应用程序,照片
从app.forms导入PhotoForm
@app.route('/',methods=[“GET”,“POST”])
def index():
形式=照片形式()
if form.validate_on_submit():
尝试:
filename=photos.save(form.photo.data)
返回重定向(url_用于(“上载的_文件”,文件名=文件名))
除非不允许上传:
打印(“不允许上载!”)
重定向(用于(“索引”)的url_)
返回呈现模板(“index.html”,form=form)
@app.route(“/uploads/”)
def上传文件(文件名):
directory=os.path.join(os.getcwd(),app.config[“upload\u PHOTOS\u DEST”])
从目录返回发送目录(目录,文件名)
#forms.py
来自flask_wtf进口FlaskForm
从flask_wtf.file导入文件字段,需要文件
从wtforms导入SubmitField
类别照片(瓶形):
照片=文件字段(验证器=[FileRequired()])
提交=提交字段(“上载”)
#config.py
导入操作系统
类配置(对象):
SECRET\u KEY=os.environ.get(“SECRET\u KEY”)
上传照片\u DEST=“上传”
上传的照片拒绝=[“bmp”、“gif”、“png”、“svg”]

您可以导入
UploadSet
,并且-如docstring中所述-通过创建自己的类、从
UploadSet继承等方式覆盖允许的
文件
方法

然后,您可以从几个Python库中选择一个来检测类型,例如

附言:
Flask上传
自2020年2月起中断,至少PyPi软件包。
我创建了一个fork,它是一个即插即用的替代品,可通过

获得。您需要使用另一个库来实现此功能。关于你想做的事,使用
枕头
我最终做了这件事,但我认为我忽略了一种内在的做这件事的方式。谢谢