【问题标题】:django problem uploading and saving documentsdjango上传和保存文档的问题
【发布时间】: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


    【解决方案1】:

    也许尝试改变:

    destination = open('fyi.xml', 'wb+')
    

    类似于:

    upload_dir = settings.MEDIA_ROOT # or wherever
    destination = open(os.path.join(upload_dir, 'fyi.xml'), 'wb+')
    

    如果是 SELinux 问题,也许这个页面会有所帮助:

    【讨论】:

    • 成功了,谢谢!仅供参考,我当然还需要添加: import os from django.conf import settings ...到views.py的顶部。
    猜你喜欢
    • 2021-10-26
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 2017-05-31
    • 2011-07-08
    • 1970-01-01
    相关资源
    最近更新 更多