首页 > 解决方案 > Django图像上传工作但不是通用文件

问题描述

我面临的情况是我可以上传图片,但不能上传一般文件。我正在使用 javascript 来跟踪进度,表示文件上传成功,但媒体文件夹中没有文件。当我为图像执行此操作时,它可以工作。基本上,图像上传工作正常,我尝试复制相同的内容并将其用于一般文件上传。这是下面的代码。

楷模

class Upload(models.Model):  # image upload model
    image = models.ImageField(upload_to='images')

    def __str__(self):
        return str(self.pk)


class FileUpload(models.Model): # file upload model
    video = models.FileField(upload_to='fileuploads/')

    def __str__(self):
        return str(self.pk)

形式:

class UploadForm(forms.ModelForm):
    class Meta:
        model = Upload
        fields = ('image',)

class FileUploadForm(forms.ModelForm):
     class Meta:
        model = FileUpload
        fields = ('video',)

意见:

def home_view(request):
    form = UploadForm(request.POST or None, request.FILES or None)
    if request.is_ajax():
        if form.is_valid():
            form.save()
            return JsonResponse({'message': 'hell yeah'})
    context = {
        'form': form,
    }
    return render(request, 'uploads/main.html', context)


def file_view(request):
    form = FileUploadForm(request.POST or None, request.FILES or None)
    if request.is_ajax():
        if form.is_valid():
            form.save()
            return JsonResponse({'message': 'hell yeah'})
    context = {
        'form': form,
    }
    return render(request, 'uploads/main1.html', context)

图片上传的 HTML 模板

{% extends "uploads/base.html" %}

{% block content %}

    <div id="alert-box"></div>
    <div id="image-box"></div>
    <br>
    <form action="" id="upload-form">
        {% csrf_token %}
        {{form.as_p}}
    </form>
    <br>
    <div id="progress-box" class="not-visible">progress</div>
    <div id="cancel-box" class="not-visible">
        <button id="cancel-btn" class="btn btn-danger">cancel</button>
    </div>

{% endblock content %}

与文件上传的 html 模板的唯一区别是

 {% extends "uploads/base1.html" %}

我使用不同的基本 html 模板。

设置:

STATIC_URL = '/static/'


STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR,'static')

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

我正在使用这里的代码 - https://github.com/hellopyplane/Progress-bar

标签: djangofile-upload

解决方案


javascript 代码使用硬编码字段"image",在您的第二种形式中称为 "video"。


推荐阅读