我正在开发一款django应用。一部分涉及上传文件(例如电子表格或其他)。我收到了这个错误:
IOError at /fileupload/
[Errno 13] Permission denied: 'fyi.xml'
'fileupload'是django应用程序名称,'fyi.xml'是我上传的测试文档。
所以,我使用chmod和chown使[项目目录] / static / documents /文件夹可写入apache。实际上我甚至尝试过制作chmod 777,仍然没有运气。
所以,在我的settings.py中,我刚刚更改了MEDIA_ROOT的位置:
MEDIA_ROOT = '/var/www/static/'
然后,如果它是SELinux的东西,我在/ var / www / static'...
中创建了新文档目录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 :(得分:0)
也许尝试改变:
destination = open('fyi.xml', 'wb+')
类似于:
upload_dir = settings.MEDIA_ROOT # or wherever
destination = open(os.path.join(upload_dir, 'fyi.xml'), 'wb+')
如果是SELinux问题,也许这个页面会有所帮助: