通过 Flask 和 Nginx 提供静态文件?
Serving Static Files Through Flask and Nginx?
我有一些通过 Flask 提供的静态文件。根据给定的请求,我 运行 进行一些处理和身份验证,然后提供文件。我一直在使用 Flask 的 send_from_directory
来做这件事,但它看起来像是将文件缓存了一点,这对我来说没有好处。我在 nginx 后面安装了 Flask 运行ning,所以我愿意通过 nginx 提供部分服务,但我需要 运行 processing/authentication 在提供文件之前。
所以,主要问题是,假设我需要在服务前在 Flask 中执行 processing/authentication,我如何使用 Flask 和 nginx 服务未缓存的静态文件?
注意:我已经看到详细说明如何仅通过 nginx 提供文件的答案,但这对我没有好处,因为我必须在提供之前在 Flask 中进行处理。
默认情况下,flask 会将您使用 send_from_directory 发送的文件缓存 12 小时。您至少有几个选项可以克服这种行为。
您可以将配置值 SEND_FILE_MAX_AGE_DEFAULT
更改为小于 1 或 0 秒的值,这将影响用于整个应用程序的默认值。或者,您可以将其直接传递给 send_from_directory
调用,您不需要使用关键字 cache_timeout
.
的缓存
例如,
@app.route('/uploads/<path:filename>')
def download_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'],
filename, cache_timeout = 0)
或者您可以继承 Flask
并覆盖 get_send_file_max_age
方法。
我有一些通过 Flask 提供的静态文件。根据给定的请求,我 运行 进行一些处理和身份验证,然后提供文件。我一直在使用 Flask 的 send_from_directory
来做这件事,但它看起来像是将文件缓存了一点,这对我来说没有好处。我在 nginx 后面安装了 Flask 运行ning,所以我愿意通过 nginx 提供部分服务,但我需要 运行 processing/authentication 在提供文件之前。
所以,主要问题是,假设我需要在服务前在 Flask 中执行 processing/authentication,我如何使用 Flask 和 nginx 服务未缓存的静态文件?
注意:我已经看到详细说明如何仅通过 nginx 提供文件的答案,但这对我没有好处,因为我必须在提供之前在 Flask 中进行处理。
默认情况下,flask 会将您使用 send_from_directory 发送的文件缓存 12 小时。您至少有几个选项可以克服这种行为。
您可以将配置值 SEND_FILE_MAX_AGE_DEFAULT
更改为小于 1 或 0 秒的值,这将影响用于整个应用程序的默认值。或者,您可以将其直接传递给 send_from_directory
调用,您不需要使用关键字 cache_timeout
.
例如,
@app.route('/uploads/<path:filename>')
def download_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'],
filename, cache_timeout = 0)
或者您可以继承 Flask
并覆盖 get_send_file_max_age
方法。