gpt4 book ai didi

python - 如何在 Django 中处理上传的文件以将其存储在数据库中

转载 作者:行者123 更新时间:2023-12-04 15:33:55 26 4
gpt4 key购买 nike

用户应从表单(图片、pdf、ms word 等)上传文件。

它们应该存储在 Oracle 数据库 (blob) 中。

在模型中我使用了 BinaryField。除了文件,我需要存储文件名 (works) 和文件扩展名 (works)(例如 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)

表单.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')

最佳答案

您可以使用read() 方法从文件中返回指定字节数,然后将其存储在数据库中。

请注意,不推荐这样做。最好从单独的 Web 服务器(如 Nginx)或从云(如 Amazon S3)提供静态文件。

这种方法很耗内存,所以你必须在前端做一些大小限制,比如最大 2mb。

如果您不使用 Django 表单,也没关系。您可以这样获取文件:request.FILES.get('your_file_key_param')

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')

关于python - 如何在 Django 中处理上传的文件以将其存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60415708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com