Отправка Zip-файла в качестве ответа во фреймворке Django Rest [дубликат]

Я создаю штрих-коды в API inj как в формате png, так и в формате pdf, а затем пытаюсь сжать их и отправить в виде zip-файла в ответ, для этого я делаю следующее:

class DownloadBarcodeImageAPIViewV2(APIView):
    # permission_classes = (permissions.IsAuthenticated,)

    def convert_image_to_pdf(self, image_path):
        image = Image.open(image_path)
        pdf_path = os.path.splitext(image_path)[0] + '.pdf'
        image.convert('RGB').save(pdf_path)
        return pdf_path

    def get(self, request):
        obj_relative_url = self.request.user.company.branding_logo.document
        obj_url = obj_relative_url.url
        po_id = request.GET['po']

        company = request.user.company.pk
        barcodes = CompanyBarcodes.objects.filter(
            po_id=po_id,
            company=company,
        ).prefetch_related('company', 'product', 'grn_id', 'asn_id', 'itemGroup')

        items = []

        for i in barcodes:
            items.append({'bar': i.barcode, 'name': str(i.product.name) + " - " + str(i.product.sku)})

        zip_buffer = io.BytesIO()  # Create a BytesIO buffer to hold the zip file

        with zipfile.ZipFile(zip_buffer, 'a', zipfile.ZIP_DEFLATED, False) as zipf:
            for item in items:
                EAN = barcode.get_barcode_class('code128')
                d = {'module_width': 0.15,
                     'module_height': 2.0,
                     'quiet_zone': 0.5,
                     'text_distance': 1.5,
                     'font_size': 3,
                     'text_line_distance': 3,
                     'dpi': 900}
                w = ImageWriter(d)
                ean = EAN(item['bar'], writer=ImageWriter())
                a = ean.save("{} - {}".format(item['name'], item['bar']), options=d)
                pdf_path = self.convert_image_to_pdf(a)
                zipf.write(pdf_path, os.path.basename(pdf_path))  # Add PDF to the zip file

        zip_buffer.seek(0)  # Move the cursor to the beginning of the buffer
        zip_data = base64.b64encode(zip_buffer.getvalue()).decode()  # Encode the zip buffer as base64

        return HttpResponse(zip_data, content_type='application/zip')  # Return the zip file in the response

и файл успешно загружается, но когда я пытаюсь открыть файл, он говорит, что его невозможно открыть, так как это недействительный архив. Какие изменения я могу сделать?

Вернуться на верх