Flask send_from_directory异常:WebP图片被强制作为附件下载
Flask WebP图片被强制下载的解决办法
问题核心:使用send_from_directory返回WebP格式图片时,即便as_attachment=False,浏览器仍会触发下载,其他图片格式可正常显示。
原因
Flask依赖Python的mimetypes模块自动推断文件的MIME类型,部分环境中默认未注册WebP的类型映射,导致返回的Content-Type为application/octet-stream——浏览器识别该类型为未知文件,进而触发下载行为。
解决方案
方案1:路由内手动指定MIME类型
针对WebP文件单独设置正确的MIME类型image/webp:
@bp.route("/<imagename>", methods=["GET"]) def get_image(imagename): if imagename.lower().endswith('.webp'): return send_from_directory( current_app.config["IMAGES_DIR"], imagename, as_attachment=False, mimetype='image/webp' ) return send_from_directory( current_app.config["IMAGES_DIR"], imagename, as_attachment=False )
方案2:全局注册WebP的MIME类型
如果应用中有大量WebP图片,可在Flask应用初始化时全局添加类型映射,无需逐个路由处理:
from flask import Flask import mimetypes app = Flask(__name__) # 注册WebP的MIME类型 mimetypes.add_type('image/webp', '.webp') # 后续的路由注册等逻辑...
两种方案都能让浏览器正确识别WebP为图片类型,从而在页面内直接显示而非触发下载。
内容的提问来源于stack exchange,提问作者araujo2kg
相关产品推荐
相关产品推荐

