Как обработать загруженный файл в Django, чтобы сохранить его в базе данных - PullRequest
1 голос
/ 26 февраля 2020

Пользователи должны загружать файлы из формы (изображения, PDF, MS Word и т. Д. c).

Они должны храниться в базе данных Oracle (большой двоичный объект).

В модели я использовал BinaryField. Помимо файла мне нужно хранить имя файла (работает) и расширение файла (работает) (например, png, jpeg, et c) и размер файла (нужна помощь).

Однако я не могу понять Как обработать загруженный файл, чтобы сохранить его в столбце BLOB-объекта базы данных. (Фиктивные данные ниже работают, хотя [см. res])

request.FILES['file'] - это ключ, который я думаю

PS Я знаю, что не рекомендуется хранить файлы stati c в базе данных но я должен сделать это.

Моя модель:

class File(models.Model): 
    du_id = models.AutoField(primary_key=True)
    du_file = models.BinaryField()
    du_file_name = models.CharField(max_length=1000)
    du_file_extension = models.CharField(max_length=100)
    du_file_size = models.CharField(max_length=100)

forms.py:

from django import forms

class UploadFileForm(forms.Form):
    file = forms.FileField(label='Upload document')

html форма:

<form method="post" action="{% url 'images:upload' %}" enctype="multipart/form-data">{% csrf_token %}    
    {{form}}
    <input type="submit" value="Upload file">
</form>

просмотр:

from django.shortcuts import render
from images.models import File
from images.forms import UploadFileForm
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
from django.urls import reverse
from django.utils.timezone import datetime
import datetime,base64

  def file_upload(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            file_name = str(form.cleaned_data['file'])
            file_name_split = file_name.split('.')
            extension = file_name_split[-1].upper()

            test_string = "test string"
            res = bytes(test_string, 'utf-8') 

            a = File.objects.create(du_file = res,du_file_name=file_name,du_file_extension=extension,
            du_file_size='1023') 

            a.save()

            return HttpResponse(file_name)
            #return HttpResponseRedirect(reverse('images:home'))
        else:
            return HttpResponse('Form is not valid!')
    else:
        return HttpResponse('Failed') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...