2009-08-13 115 views
1

我正在Django應用程序工作。一部分會涉及上傳文件(例如電子表格或其他)。我收到此錯誤:django問題上傳和保存文件

IOError at /fileupload/ 

[Errno 13] Permission denied: 'fyi.xml' 

其中「文件上傳」是Django應用程序名稱和「fyi.xml」是測試文檔,我上傳。

因此,我使用chmod和chown使[項目目錄]/static/documents /文件夾可寫入apache。其實我甚至嘗試過使用chmod 777,但還是沒有運氣。

所以,在我的settings.py我只是改變了我的地方是MEDIA_ROOT:

MEDIA_ROOT = '/var/www/static/' 

然後,如果它是一個SELinux的東西,我在/ var/WWW創建新的文檔目錄/靜態」 ...

drwxr-xr-x 2 apache root 4096 Aug 13 11:20 documents 

然後我做了這些命令,試圖改變上下文,所以Apache將被允許寫在這裏。我對這個發行版不太熟悉,它給了我們紅帽的味道,所以我從來沒有超越chmod和/或chown來解決權限問題。

sudo chcon -h system_u:object_r:httpd_sys_content_t /var/www/static 
sudo chcon -R -h root:object_r:httpd_sys_content_t /var/www/static 
sudo chcon -R -h root:object_r:httpd_sys_content_t /var/www/static/* 

這沒有什麼區別。說實話,我不是很積極,我甚至有SELinux在這裏,但由於正常的Unix權限似乎沒有工作,我想我會嘗試它。

那麼,有沒有人有關於接下來看什麼的想法?不知道我應該多少代碼張貼在這裏,但萬一這將有助於在這裏就是在我的views.py:

views.py 
from django.http import HttpResponseRedirect 
from django.shortcuts import render_to_response 
from forms import UploadFileForm 
from fyi.models import Materials 

def handle_uploaded_file(f): 
    destination = open('fyi.xml', 'wb+') 
    for chunk in f.chunks(): 
     destination.write(chunk) 
    destination.close() 


def upload_file(request): 
    if request.method == 'POST': 
     form = UploadFileForm(request.POST, request.FILES) 
     if form.is_valid(): 
      handle_uploaded_file(request.FILES['document']) 
      form.save() 
      template = 'upload_success.html' 
    else: 
     form = UploadFileForm() 
     template = 'fileupload.html' 
    return render_to_response(template, {'form': form}) 

...任何幫助,將不勝感激。

回答

0

也許嘗試改變:

destination = open('fyi.xml', 'wb+') 

喜歡的東西:

upload_dir = settings.MEDIA_ROOT # or wherever 
destination = open(os.path.join(upload_dir, 'fyi.xml'), 'wb+') 

如果是SELinux的問題,也許這個頁面將幫助:

+0

工作,謝謝! 只爲其他人的FYI,我當然還需要添加: 進口操作系統 從django.conf導入設置 ...到的頂部views.py。 – rossdavidh 2009-08-13 18:39:53

+0

不客氣!很高興它解決了。 :) – ars 2009-08-13 18:59:06