2010-06-29 6 views
1

Tout en essayant d'envoyer le formulaire avec le champ d'image dans ce Je reçois:
Exception Type: OSError at /user/register/
Exception Value: (13, 'Permission denied')
OSError sur le téléchargement de fichiers dans Django

Bien sûr première chose que j'ai vérifié les autorisations étaient à mes dossiers, et juste au cas où mettez-les à 777 sur tout le chemin de '/'. Toujours rien. J'ai donc essayé d'ajouter des paramètres aux paramètres, qui sont maintenant configurés comme ceci:

ADMIN_MEDIA_PREFIX 
'/site_media/admin/' 
CACHE_BACKEND 
'locmem://' 
DEFAULT_CHARSET  
'utf-8' 
DEFAULT_CONTENT_TYPE  
'text/html' 
DEFAULT_FILE_STORAGE  
'django.core.files.storage.FileSystemStorage' 
FILE_CHARSET  
'utf-8' 
FILE_UPLOAD_HANDLERS  
('django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler') 
FILE_UPLOAD_MAX_MEMORY_SIZE  
2621440 
FILE_UPLOAD_PERMISSIONS  
777 
FILE_UPLOAD_TEMP_DIR  
None 
FS_ROOT  
'/home/rails/fandrive' 
MEDIA_ROOT 
'/home/fandrive/www/fandrive/site_media' 
MEDIA_URL 
'/site_media/' 
PROJECT_PATH  
'/home/rails/fandrive' 
SESSION_FILE_PATH 
None 

request.META:

CONTENT_LENGTH  
'8249' 
CONTENT_TYPE  
'multipart/form-data; boundary=---------------------------26681719213985' 
DOCUMENT_ROOT 
'/home/rails/fandrive/public' 
HTTP_ACCEPT  
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' 
HTTP_ACCEPT_CHARSET  
'ISO-8859-1,utf-8;q=0.7,*;q=0.7' 
HTTP_ACCEPT_ENCODING  
'gzip,deflate' 
HTTP_ACCEPT_LANGUAGE  
'en-us,en;q=0.5' 
HTTP_CONNECTION  
'keep-alive' 
HTTP_CONTENT_LENGTH  
'8249' 
HTTP_CONTENT_TYPE 
'multipart/form-data; boundary=---------------------------26681719213985' 
HTTP_HOST 
'example.com' 
HTTP_KEEP_ALIVE  
'115' 
HTTP_REFERER  
'http://example.com/user/register/' 
HTTP_USER_AGENT  
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6' 
PATH_INFO 
u'/user/register/' 
QUERY_STRING  
'' 
REMOTE_PORT  
'52869' 
REQUEST_METHOD 
'POST' 
REQUEST_URI  
'/user/register/' 
SCRIPT_NAME  
u'' 
SERVER_PROTOCOL  
'HTTP/1.1' 
SERVER_SOFTWARE  
'Apache' 
_ 
'_' 
wsgi.errors  
<open file '<stderr>', mode 'w' at 0x7f2a6026f140> 
wsgi.input 
<socket._fileobject object at 0x7f2a5cbc4848> 
wsgi.multiprocess 
True 
wsgi.multithread  
False 
wsgi.run_once 
True 
wsgi.url_scheme  
'http' 
wsgi.version  
(1, 0) 

Et enfin mon retraçage:

Traceback: 
File "/home/rails/fandrive/site-packages/django/core/handlers/base.py" in get_response 
    92.     response = callback(request, *callback_args, **callback_kwargs) 
File "/home/rails/fandrive/registration/views.py" in register 
    47.    new_user = backend.register(request, **form.cleaned_data) 
File "/home/rails/fandrive/registration/backends/default/__init__.py" in register 
    23.          request=request) 
File "/home/rails/fandrive/site-packages/django/dispatch/dispatcher.py" in send 
    166.    response = receiver(signal=self, sender=sender, **named) 
File "/home/rails/fandrive/regbackend.py" in user_created 
    39.  data.save() 
File "/home/rails/fandrive/site-packages/django/db/models/base.py" in save 
    410.   self.save_base(force_insert=force_insert, force_update=force_update) 
File "/home/rails/fandrive/site-packages/django/db/models/base.py" in save_base 
    483.      values = [(f, f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, True))) for f in meta.local_fields if not isinstance(f, AutoField)] 
File "/home/rails/fandrive/site-packages/django/db/models/fields/files.py" in pre_save 
    252.    file.save(file.name, file, save=False) 
File "/home/rails/fandrive/site-packages/django/db/models/fields/files.py" in save 
    91.   self.name = self.storage.save(name, content) 
File "/home/rails/fandrive/site-packages/django/core/files/storage.py" in save 
    47.   name = self._save(name, content) 
File "/home/rails/fandrive/site-packages/django/core/files/storage.py" in _save 
    146.    os.makedirs(directory) 
File "/bin/python-2.6.1/lib/python2.6/os.py" in makedirs 
    150.    makedirs(head, mode) 
File "/bin/python-2.6.1/lib/python2.6/os.py" in makedirs 
    150.    makedirs(head, mode) 
File "/bin/python-2.6.1/lib/python2.6/os.py" in makedirs 
    150.    makedirs(head, mode) 
File "/bin/python-2.6.1/lib/python2.6/os.py" in makedirs 
    150.    makedirs(head, mode) 
File "/bin/python-2.6.1/lib/python2.6/os.py" in makedirs 
    150.    makedirs(head, mode) 
File "/bin/python-2.6.1/lib/python2.6/os.py" in makedirs 
    157.  mkdir(name, mode) 

Toutes les idées que plus devrais-je vérifier?

MISE À JOUR: Mon modèle

class UserProfile(InheritedProfile): 
    def upload_path(self, field_attname): 
     filename = hashlib.md5(field_attname).hexdigest()[:4] + "_" + field_attname 
     return "uploads/users/%s" % (filename,) 

    user = models.ForeignKey(User, unique=True, related_name='profile') 
    image = models.ImageField(upload_to=upload_path, verbose_name="Image", blank=True, null=True) 

Je l'ai déjà créé "uploads/utilisateurs de dossier, alors pourquoi est-il tente de créer un dossier - pas seulement un fichier?

+0

toutes les statistiques stockées dans les médias de site fonctionnent sans aucun problème – crivateos

Répondre

2

L'utilisation d'apache qui exécute votre application django n'a pas l'autorisation de créer le dossier/fichier dans votre répertoire multimédia.

Une solution temporaire rapide serait de

Accédez à votre dossier multimédia:

/home/fandrive/www/fandrive/site_media

et le type:

sudo chmod -R a+w 

qui rend votre dossier inscriptible par tous les utilisateurs.

Cette approche peut ne pas être sécurisée. Pour le sécuriser, vous pouvez modifier la propriété du dossier pour cet utilisateur ou créer un groupe et affecter les autorisations à ce groupe.

+0

Je l'avais déjà réglé sur 0777. Cela ne résout cependant pas mon problème en quelque sorte :( – crivateos

Questions connexes