Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flask: IOError when saving uploaded files

Tags:

python

flask

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?

like image 769
slachterman Avatar asked May 17 '12 14:05

slachterman


2 Answers

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
like image 64
ajknzhol Avatar answered Nov 07 '22 19:11

ajknzhol


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.

like image 23
jd. Avatar answered Nov 07 '22 17:11

jd.