Я использую django 1.11
+ rest_framework
, пытаясь реализовать метод сжатия без потерь, используя библиотеку lz4
python
. В двух словах, я реализовал метод представления POST
на основе классов, в котором определен метод сжатия. Позже я хотел бы реализовать метод распаковки, когда выполняется запрос GET
. Когда я пытаюсь сделать запрос POST
, я получаю TypeErrorr
log:
a bytes-like object is required, not 'InMemoryUploadedFile'
Я не очень знаком со сжатием без потерь, было бы неплохо правильно выбрать правильное направление. И наконец, есть ли другой способ, которым я бы реализовал сжатие и распаковку файлов методами POST
и GET
?
Моя модель выглядит следующим образом:
class EmployeeDocument(models.Model):
"""
Model, Which holds Employee documents uploaded.
"""
employee = models.ForeignKey(
Employee, related_name="employee_docs", null=True, blank=True)
document = models.FileField(
upload_to='Images/', default='Images/None/No-img.jpg')
details = models.TextField()
# url = models.URLField(null=True)
# path_to_image = models.CharField(null=True, max_length=100)
# upload_date = models.DateTimeField(auto_now=True, db_index=True)
def __str__(self):
return 'DOC - %s' % (self.employee.user.username)
Тогда Views.py
class EmployeeDocumentPOST(APIView):
"""
compress Document
"""
permission_class = [AllowAny]
serializer_class = EmployeeDocumentSerializer
def compressed_doc(self,document):
document = lz4.frame.compress(document)
return document
def post(self, request, *args, **kwargs):
compressd_doc = self.compressed_doc(document)
employee = Employee.objects.get(id=request.data.pop('employee'))
detail = request.data.get('detail')
employee_doc = EmployeeDocument.objects.create(**request.data)
employee_doc.compressed_doc = compressed_doc
employee_doc.employee = employee
employee_doc.detail = detail
employee_doc.save()
serializer = EmployeeDocument(employee_doc)
return Response(serializer.data, status = status, status = status.HTTP_200_OK)