.pdf поврежден после того, как он был сохранен и загружен - PullRequest
0 голосов
/ 05 ноября 2018

Я сохранил .pdf в models.FileField и сделал его доступным для загрузки пользователями. Но когда я загружаю файл, он поврежден. Может кто-нибудь сказать, правильно ли я его храню или указать мне в каком-то направлении? Моя установка следующая:

models.py

class Barcard(models.Model):
    name = models.CharField(max_length=30)
    drinks = models.ManyToManyField(Drink)
    barcardFile = models.FileField(blank=True, upload_to='barcard') 
    mixingFile = models.FileField(blank=True, upload_to='mixing') 

    def generateFiles(self):
        bashCommand = 'make -C tkweb/apps/drinks/drinkskort/'
        subprocess.call(bashCommand, shell=True)
        barFile = open('tkweb/apps/drinks/drinkskort/bar_drinks.pdf', encoding = "ISO-8859-1")
        mixFile = open('tkweb/apps/drinks/drinkskort/mixing_drinks.pdf', encoding = "ISO-8859-1")
        self.barcardFile.save(self.name+'_barcard',File(barFile))
        self.mixingFile.save(self.name+'_mixing',File(mixFile))

view.py

def barcardGen(request):
    if request.method =='POST':
        card = request.POST.get('barcard')
        card_obj = Barcard.objects.get(id=card)
        barcardName = card_obj.name
        card_obj.generateFiles()
        return HttpResponseRedirect('/drinks/download/'+card)
    else:
        return HttpResponseRedirect('/drinks/')

def download(request, barcard_id):
    if request.method == 'GET':
        barcard = get_object_or_404(Barcard, pk=barcard_id)
        return render(request, 'drinks/download.html', {'barcard':barcard})
    else:
        return HttpResponseRedirect('/drinks/')

шаблон / напитки / download.py

{% extends "drinks/base.html" %}
{% block fulltitle %}Drinks{% endblock %}
{% block content %}
<h1>{{ barcard.name }}</h1>
<p> Download barkort her: <a href='{{barcard.barcardFile.url}}'>{{barcard.name}} barkort</a> </p>
<p> Download blandekort her: <a href='{{barcard.mixingFile.url}}'>{{barcard.name}} blandeliste</a></p>
{% endblock %}

1 Ответ

0 голосов
/ 05 ноября 2018

PDF-файлы являются двоичными файлами. Вы должны прочитать их в двоичном режиме rb без указания текстовой кодировки:

barFile = open('tkweb/apps/drinks/drinkskort/bar_drinks.pdf', "rb")
mixFile = open('tkweb/apps/drinks/drinkskort/mixing_drinks.pdf', "rb")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...