2010-06-29 22 views
1

上傳文件,同時嘗試與像場的形式發送它我得到:
Exception Type: OSError at /user/register/
Exception Value: (13, 'Permission denied')
OSERROR在Django的

當然,第一件事我檢查了權限,以我的文件夾,以防萬一在'/'的整個路徑上將它們設置爲777。依然沒有。所以我嘗試添加的參數設置,現在設置是這樣的:

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) 

最後我回溯:

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) 

任何想法我應該多檢查一下?

UPDATE:我的模型

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) 

我已經創建了「上傳/用戶」文件夾,以便爲什麼它試圖創建一個文件夾 - 不只是一個文件?

+0

所有靜態存儲在網站媒體工作沒有任何問題 – crivateos 2010-06-29 00:46:06

回答

2

運行您的django應用程序的apache使用沒有權限在媒體目錄中創建文件夾/文件。

一個快速的臨時解決將是

轉到你的媒體文件夾:

/home/fandrive/www/fandrive/site_media

和類型:

sudo chmod -R a+w 

其所有用戶,使您的文件夾可寫。

此方法可能不安全。爲了確保安全,您可以將該文件夾的所有權更改爲該用戶,或者創建一個組並將權限分配給該組。

+0

我已經設置爲0777.仍然這並不能解決我的問題:( – crivateos 2010-06-29 09:03:49