flask-uploads 中的文件下载认证

File download authentication in flask-uploads

是否有可能强制对 Flask-Uploads 提供的文件进行身份验证或至少禁用此路由?

@uploads_mod.route('/<setname>/<path:filename>')
def uploaded_file(setname, filename):
    config = current_app.upload_set_config.get(setname)
    if config is None:
        abort(404)
    return send_from_directory(config.destination, filename)

似乎任何上传的文件都可以被任何(甚至没有登录)用户下载。

或者唯一的可能性是使用 Flask Uploading Files 中描述的自定义实现?

Flask-Uploads 似乎没有提供改变路由行为方式的方法。不过,您无需放弃 Flask-Uploads,只需将视图替换为您自己的版本即可。

假设您正在使用 Flask-Login 并且您想要的只是一个简单的 login_required 检查,您可以将 app.view_functions 中的函数替换为包装版本。

from flask_login import login_required

app.view_functions['_uploads.uploaded_file'] = login_required(app.view_functions['_uploads.uploaded_file'])

如果您想要更复杂的东西,请编写您自己的视图并替换为它。可以用app.endpoint修饰函数而不是直接用app.view_functions

@app.endpoint('_uploads.uploaded_file')
@login_required
def my_uploaded_file(setname, filename):
    # do custom stuff