【发布时间】:2010-11-19 09:16:01
【问题描述】:
我正在开发一个 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 在这里写入。我对这个发行版不太熟悉,它是我们获得的 Red Hat 的味道,所以我从来不需要超越 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})
...任何帮助将不胜感激。
【问题讨论】:
标签: python django file permissions