Python 如何在Django中处理上载的文件以将其存储在数据库中
用户应该从表单上传文件(图像、pdf、ms word等) 它们应该存储在Oracle数据库(blob)中 在模型中,我使用了Python 如何在Django中处理上载的文件以将其存储在数据库中,python,django,blob,Python,Django,Blob,用户应该从表单上传文件(图像、pdf、ms word等) 它们应该存储在Oracle数据库(blob)中 在模型中,我使用了BinaryField。除了档案, 我需要存储文件名(作品)和文件扩展名(作品)(例如png、jpeg等)以及文件大小(需要帮助) 但是,我不知道如何处理上传的文件,以便将其存储到数据库blob列。(下面的虚拟数据仍然有效[请参见res] request.FILES['file']是我认为的关键 另外,我知道在数据库中存储静态文件不是最好的做法,但我必须这样做 我的模型:
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>
您可以在查看django文档以上载文件。
此处给出了实现片段:
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import UploadFileForm
# Imaginary function to handle an uploaded file.
from somewhere import handle_uploaded_file
def upload_file(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_file(request.FILES['file'])
return HttpResponseRedirect('/success/url/')
else:
form = UploadFileForm()
return render(request, 'upload.html', {'form': form})
因为他们使用的是二进制格式的文件,所以您应该能够使用它您可以使用read()
方法从文件中返回指定的字节数,然后您可以将其存储在数据库中
请注意,不建议这样做。最好从单独的web服务器(如Nginx)或云服务器(如AmazonS3)提供静态文件
这种方法需要大量内存,因此必须对前端进行一些大小限制,比如最大2mb
如果您不使用Django表单,则可以。您可以这样获得文件:
request.FILES.get('your\u file\u key\u param')
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import UploadFileForm
# Imaginary function to handle an uploaded file.
from somewhere import handle_uploaded_file
def upload_file(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_file(request.FILES['file'])
return HttpResponseRedirect('/success/url/')
else:
form = UploadFileForm()
return render(request, 'upload.html', {'form': form})
def handle_uploaded_file(f):
with open('some/file/name.txt', 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
def file_upload(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
file = form.cleaned_data.get('your_file')
file_bytes = file.read()
a = File.objects.create(du_file = file_bytes ,du_file_name=file_name,du_file_extension=extension,
du_file_size='1023')
a.save()
return HttpResponse(file_name)
else:
return HttpResponse('Form is not valid!')
else:
return HttpResponse('Failed')