2011-04-04 23 views
9

Tengo problemas para hacer que django juegue bien con las cargas de imágenes. Mi script creará directorios basados ​​en la fecha de este modo:Django - Carga de medios [Errno 13] Permiso denegado

file = models.FileField(upload_to='uploads/%m-%Y/') 

Ahora, si puedo crear el directorio de fecha en la carpeta de archivos y chmod la carpeta a 755, la carga funciona bien, pero si trato de chmod la carga la carpeta sin crear la subcarpeta con fecha (que necesito que django haga), obtengo un error de permisos.

¿Cómo hago para que una carpeta permita la creación de subcarpetas?

Aquí es una retraza:

Django Version: 1.3 
Python Version: 2.5.2 
Installed Applications: 
['django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.admin', 
'tagging', 
'mediamanager', 
'livesettings', 
'projects'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware') 


Traceback: 
File "/var/lib/python-support/python2.5/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "/var/lib/python-support/python2.5/django/utils/decorators.py" in _wrapped_view 
    93.      response = view_func(request, *args, **kwargs) 
File "/var/lib/python-support/python2.5/django/contrib/auth/decorators.py" in _wrapped_view 
    23.     return view_func(request, *args, **kwargs) 
File "/var/www/enigma-dev/enigma/mediamanager/views.py" in upload_media 
    24.   m.upload_media(data=form.cleaned_data, params=params) 
File "/var/www/enigma-dev/enigma/mediamanager/models.py" in upload_media 
    63.  self.save() 
File "/var/lib/python-support/python2.5/django/db/models/base.py" in save 
    460.   self.save_base(using=using, force_insert=force_insert, force_update=force_update) 
File "/var/lib/python-support/python2.5/django/db/models/base.py" in save_base 
    543.       for f in meta.local_fields if not isinstance(f, AutoField)] 
File "/var/lib/python-support/python2.5/django/db/models/fields/files.py" in pre_save 
    255.    file.save(file.name, file, save=False) 
File "/var/lib/python-support/python2.5/django/db/models/fields/files.py" in save 
    92.   self.name = self.storage.save(name, content) 
File "/var/lib/python-support/python2.5/django/core/files/storage.py" in save 
    49.   name = self._save(name, content) 
File "/var/lib/python-support/python2.5/django/core/files/storage.py" in _save 
    166.    os.makedirs(directory) 
File "/usr/lib/python2.5/os.py" in makedirs 
    171.  mkdir(name, mode) 

Exception Type: OSError at /media-manager/upload/ 
Exception Value: [Errno 13] Permission denied: '/var/www/site-dev/site/static/uploads/04-2011' 

Respuesta

19

El proceso que ejecuta el intérprete de Python no tiene permiso para escribir en el directorio de medios. Necesitará chgrp o chown el directorio de medios al mismo grupo que su proceso de Python, y asegúrese de tener al menos g+rwx en los directorios y g+rw en los archivos.

+0

Disculpe, ¿podría decirme qué comando usaría para averiguar los permisos de una carpeta? Estoy usando ubuntu. – Hanpan

+0

Pruebe el comando 'ls', p. 'ls -lha' –

+2

¿Y cómo puedes saber en qué grupo está el proceso de Python? ¡Gracias! – cloudrave

8

que estaba recibiendo el mismo error y solucionarlo cambiando:

MEDIA_ROOT = '/media/' 

a:

MEDIA_ROOT = 'media/' 

Bajo settings.py.

Cuestiones relacionadas