【问题标题】:Creating a file uploading system in Django在 Django 中创建文件上传系统
【发布时间】:2018-08-05 05:42:56
【问题描述】:

在我的Django 应用程序中,我打算创建一个文件上传系统,将用户上传的文件放在data 文件夹中。为了做到这一点,我按照在线教程Link 1Link 2 编写了一个下面的简单应用程序。但它正在产生错误

PermissionError: [Errno 13] Permission denied: '/data'

项目结构

<project_name>
|--data
|--<app_name>
|--<project_name>
|--manage.py

index.html

<div class="custom-file">
<input type="file" class="custom-file-input" id="fileupload" name="fileupload" multiple required>
<label class="custom-file-label" for="fileupload">Choose files</label>
</div>

view.py

from django.core.files.storage import FileSystemStorage
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def upload(request):
    files = request.FILES.getlist('fileupload')

    fs = FileSystemStorage(location="/data/upload/")

    for fl in files:
        fs.save(fl.name, fl)

settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'data')

【问题讨论】:

    标签: django python-3.x file-upload


    【解决方案1】:

    创建多个文件上传应该在表单中处理。

    看看Uploading multiple files

    在你的forms.py

    from django import forms
    
    class FileFieldForm(forms.Form):
        file_field = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
    

    在你的views.py

    from django.views.generic.edit import FormView
    from .forms import FileFieldForm
    
    class FileFieldView(FormView):
        form_class = FileFieldForm
        template_name = 'upload.html'  # Replace with your template.
        success_url = '...'  # Replace with your URL or reverse().
    
        def post(self, request, *args, **kwargs):
            form_class = self.get_form_class()
            form = self.get_form(form_class)
            files = request.FILES.getlist('file_field')
            if form.is_valid():
                for f in files:
                    ...  # Do something with each file.
                return self.form_valid(form)
            else:
                return self.form_invalid(form)
    

    【讨论】:

    • 我的上述方法中缺少什么
    • 如果您没有对该目录的写入权限,则会显示错误chmod a+w path/to/dir 并且 fs 实例应该在函数之外创建,请查看您提到的教程nemesisdesign.net/blog/coding/…
    猜你喜欢
    • 1970-01-01
    • 2017-12-14
    • 2015-09-23
    • 1970-01-01
    • 2015-04-09
    • 2010-11-02
    • 2010-09-20
    • 2015-02-14
    相关资源
    最近更新 更多