Django 上传和保存文档的问题
我正在开发一个django应用程序,其中有一部分需要上传文件(比如电子表格或者其他文件)。我遇到了这个错误:
IOError at /fileupload/
[Errno 13] Permission denied: 'fyi.xml'
这里的'fileupload'是我的django应用名称,而'fyi.xml'是我正在上传的测试文档。
为了让apache能够写入,我使用了chmod和chown命令,把[项目目录]/static/documents/文件夹的权限设置为可写。其实我甚至尝试把权限设置为chmod 777,但还是没有成功。
接着,我在settings.py文件中修改了我的MEDIA_ROOT的位置:
MEDIA_ROOT = '/var/www/static/'
然后,为了防止是SELinux的问题,我在/var/www/static下创建了新的documents目录...
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})
...任何帮助都将不胜感激。
1 个回答
0
也许可以试着把:
destination = open('fyi.xml', 'wb+')
改成类似这样的:
upload_dir = settings.MEDIA_ROOT # or wherever
destination = open(os.path.join(upload_dir, 'fyi.xml'), 'wb+')
如果是SELinux的问题,也许这个页面会对你有帮助: