Пользователи должны загружать файлы из формы (изображения, 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')