Скачать двоичные данные - PullRequest
1 голос
/ 22 мая 2019

Как загрузить данные / файл BinaryField с помощью шаблона. как мы сделали для FileField.

<td><a href={{certificate.bytes.url}} download></a>

Я прошёл все файлы url.py и view.py, приведенные ниже, пожалуйста, посмотрите. Это может дать выдержку из моего кода. и, пожалуйста, помогите мне с этим, я новичок в Джанго. .................................................. .................................................. .................................................. ......

url.py

from django.conf.urls.static import static
from django.conf.urls import url
from django.views.defaults import page_not_found
urlpatterns=[
    path('',views.index, name = 'index'),
    url(r'^list/$', views.list, name='list'),
    url(r'^list/create$', views.certificate_create, name='certificate_create'),
    url(r'^list/(?P<id>\d+)/update$', views.certificate_update, name='certificate_update'),
    url(r'^list/(?P<id>\d+)/delete$', views.certificate_delete, name='certificate_delete'),
    path('download',views.download, name = 'download'),


]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

1 Ответ

1 голос
/ 22 мая 2019

Итак, нам нужны модели Django, например, содержащие BinaryField.

models.py

class Person(models.Model):
    name = models.CharField(max_length=55)
    surname = models.CharField(max_length=55)
    image = models.BinaryField()

    class Meta:
        db_table = 'person'

urls.py

from django.urls import path
from . import views
urlpatterns = [
    path('', views.index, name='index'),
    path('download/<int:pk>/', views.download, name='download'),
]

views.py

import io
from django.shortcuts import render
from django.http import FileResponse
from .models import Person

def index(request):
    # there are listed all models.
    persons = Person.objects.all()
    return render(request, 'index.html', {'persons': persons})

def download(request, pk):
    # this url is for download
    try:
        obj = Person.objects.get(pk=pk)
    except Person.DoesNotExist as exc:
        return JsonResponse({'status_message': 'No Resource Found'})
    get_binary = obj.image
    if get_binary is None:
        return JsonResponse({'status_message': 'Resource does not contian image'})
    if isinstance(get_binary, memoryview):
        binary_io = io.BytesIO(get_binary.tobytes())
    else:
        binary_io = io.BytesIO(get_binary)
    response = FileResponse(binary_io)
    response['Content-Type'] = 'application/x-binary'
    response['Content-Disposition'] = 'attachment; filename="{}.png"'.format(pk) # You can set custom filename, which will be visible for clients.
    return response

index.html

{% for person in persons %}
    <a href="{% url 'download' pk=person.pk %}">{{ person.name }}</a><br />
{% endfor %}

Это решение для отправки двоичного файла с сервера и загрузки. Все компоненты показаны. Удачи!

...