django问题上传和保存文件

时间:2009-08-13 17:00:26

标签: python django file permissions

我正在开发一款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})

......任何帮助都将不胜感激。

1 个答案:

答案 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问题,也许这个页面会有所帮助: