【发布时间】:2020-06-10 10:21:59
【问题描述】:
用户应从表单(图像、pdf、ms word 等)上传文件。
它们应该存储在 Oracle 数据库 (blob) 中。
在我使用BinaryField的模型中。除了文件,
我需要存储文件名(作品)和文件扩展名(作品)(例如 png、jpeg 等)和文件大小(需要帮助)。
但是我不知道如何处理上传的文件以便将其存储到数据库 blob 列。 (虽然下面的虚拟数据有效 [参见res])
request.FILES['file']是我认为的关键
附:我知道将静态文件存储在数据库中不是最佳做法,但我必须这样做。
我的模特:
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')
【问题讨论】: