Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django中处理上载的文件以将其存储在数据库中_Python_Django_Blob - Fatal编程技术网

Python 如何在Django中处理上载的文件以将其存储在数据库中

Python 如何在Django中处理上载的文件以将其存储在数据库中,python,django,blob,Python,Django,Blob,用户应该从表单上传文件(图像、pdf、ms word等) 它们应该存储在Oracle数据库(blob)中 在模型中,我使用了BinaryField。除了档案, 我需要存储文件名(作品)和文件扩展名(作品)(例如png、jpeg等)以及文件大小(需要帮助) 但是,我不知道如何处理上传的文件,以便将其存储到数据库blob列。(下面的虚拟数据仍然有效[请参见res] request.FILES['file']是我认为的关键 另外,我知道在数据库中存储静态文件不是最好的做法,但我必须这样做 我的模型:

用户应该从表单上传文件(图像、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>

您可以在查看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')