3

我正在使用Flask-Uploads上传文件并输出 URL。但是,由于某种原因,URL 总是指向 404!我可以在正确的文件夹中看到该文件,但 URL 似乎无法找到它。这是我正在使用的配置...

UPLOADS_DEFAULT_URL = os.environ.get("UPLOADS_URL", "http://localhost:5000/")
UPLOADS_DEFAULT_DEST = "app/uploads"

我还有一个上传集定义为:

productUploadSet = UploadSet('plist', extensions=('xlsx', 'csv', 'xls'))

该文件位于“app/uploads/plist/filename.csv”中,我会收到一个返回给我的 url,例如“ http://localhost:5000/productlist/filename.csv ”,但每当我打开 URL 时,它就是总是 404。我知道 Flask-Uploads 中的 url 方法实际上并没有检查文件是否存在,但我可以看到文件确实存在。它是否以某种方式在错误的地方寻找?谢谢你的帮助。

4

1 回答 1

3

Flask 上传文件的指南

现在缺少最后一件事:上传文件的服务。从 Flask 0.5 开始,我们可以使用一个函数来为我们做这件事:

from flask import send_from_directory

@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'],
                               filename)

或者,您可以将 upload_file 注册为 build_only 规则并使用 SharedDataMiddleware。这也适用于旧版本的 Flask:

from werkzeug import SharedDataMiddleware
app.add_url_rule('/uploads/<filename>', 'uploaded_file',
                 build_only=True)
app.wsgi_app = SharedDataMiddleware(app.wsgi_app, {
    '/uploads':  app.config['UPLOAD_FOLDER']
})

如果不实现其中之一,Flask 不知道如何提供上传的文件。

于 2015-02-12T21:56:22.980 回答