Flask: IOError when saving uploaded files


Question

I am learning Flask and am attempting to work through the uploading files pattern documented here: http://flask.pocoo.org/docs/patterns/fileuploads/. I am working in Firefox 12 on Windows 7, and am running my app in debug mode on my local machine.

I am copying the example verbatim, except for the value of the UPLOAD_FOLDER variable, which I have defined as UPLOAD_FOLDER = '/uploads' and have created a directory called "uploads" which is present in the application root (along with the static and template directories).

Upon uploading the file, I am receiving the error: IOError: [Errno 2] No such file or directory: '/uploads\\u.png'

Interestingly, if I specify a raw string for the uploads folder which points directly to the uploads directly on my machine like UPLOAD_FOLDER = r'C:\Python27\projects\Flask\myproject\uploads', everything works just fine.

Am I not specifying the directory in the right way? Should the uploads directory be placed somewhere else?

1
10
12/1/2014 2:47:06 AM

Accepted Answer

The slash at the beginning of '/uploads' makes the path specification absolute: the leading slash represents the root of the filesystem hierarchy. While that might not be exactly how things work on Windows, it makes sense for Python to understand it this way as its path-handling functions are cross-platform.

The forms 'uploads/' and './uploads/' are equivalent and they are relative.

Note that relative paths are relative to the current directory, which you don't necessarily control, so you might want to specify an absolute path for UPLOAD_FOLDER.

12
5/17/2012 2:51:10 PM

Why not try this, it works for me.

APP_ROOT = os.path.dirname(os.path.abspath(__file__))
UPLOAD_FOLDER = os.path.join(APP_ROOT, 'static/uploads')
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon