我正在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})
...任何幫助,將不勝感激。
工作,謝謝! 只爲其他人的FYI,我當然還需要添加: 進口操作系統 從django.conf導入設置 ...到的頂部views.py。 – rossdavidh 2009-08-13 18:39:53
不客氣!很高興它解決了。 :) – ars 2009-08-13 18:59:06