我正在学习Flask,并且正在尝试完成此处记录的上传文件模式:http://flask.pocoo.org/docs/patterns/fileuploads/。我在Windows 7上使用Firefox 12,并且正在本地计算机上以调试模式运行我的应用程序。
我正在逐字复制示例,除了UPLOAD_FOLDER变量的值,我将其定义为UPLOAD_FOLDER = '/uploads'
并创建了一个名为“uploads”的目录,该目录存在于应用程序根目录中(以及静态和模板目录)。
上传文件后,我收到错误:IOError: [Errno 2] No such file or directory: '/uploads\\u.png'
有趣的是,如果我为uploads文件夹指定一个原始字符串,它直接指向我的机器上的上传内容,如UPLOAD_FOLDER = r'C:\Python27\projects\Flask\myproject\uploads'
,那么一切正常。
我没有以正确的方式指定目录吗?上传目录应该放在其他地方吗?
答案 0 :(得分:34)
为什么不尝试这个,它适合我。
APP_ROOT = os.path.dirname(os.path.abspath(__file__))
UPLOAD_FOLDER = os.path.join(APP_ROOT, 'static/uploads')
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
答案 1 :(得分:12)
'/ uploads'开头的斜杠使路径规范成为绝对路径:前导斜杠表示文件系统层次结构的根。虽然这可能并不完全是Windows上的工作原理,但Python以这种方式理解它是有道理的,因为它的路径处理功能是跨平台的。
表单'uploads /'和'./uploads/'是等效的,它们是相对的。
请注意,相对路径是相对于您不一定控制的当前目录,因此您可能希望为UPLOAD_FOLDER指定绝对路径。