@Lepilov

DRF как загружать файлы переданные в бинарном виде?

Я сделал стандартную API для загрузки файлов (docx, pdf, rtf) на сервер. В стандартном интерфейсе DRF загрузка отрабатывает как положено.

models.py
class Documents(models.Model):

    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    upload = models.FileField(storage=PrivateMediaStorage())
    filename = models.CharField(_('documents name'), max_length=64)
    datafile = models.FileField()
    created = models.DateTimeField(auto_now_add=True)
    type = models.ForeignKey(Doctype, on_delete=models.CASCADE, blank=True)


views.py

class DocumentsListView(AwsUrlMixin, viewsets.ViewSetMixin, generics.ListCreateAPIView):
    queryset = Documents.objects.all()
    serializer_class = DocumentsSerializer
    permission_classes = (IsAuthenticated, LifeLinePermissions)
    pagination_class = None

    def perform_create(self, serializer):
        serializer.save(author=self.request.user)


serializer.py

class DocumentsSerializer(AwsUrlMixin, serializers.ModelSerializer):
    type_name = serializers.CharField(source='type.type', read_only=True)
    type = serializers.PrimaryKeyRelatedField(queryset=Doctype.objects.all())
    view_file = serializers.SerializerMethodField()
    author = serializers.CharField(source='author.username', read_only=True)
    created = serializers.DateTimeField(format=date_format, input_formats=None, default_timezone=None, read_only=True)
    parser_classes = (MultiPartParser, )

    class Meta:
        model = Documents
        fields = ('id', 'author', 'filename', 'datafile', 'type', 'type_name', 'created', 'view_file')


Проблемы начались, когда прикрутили API к React и стали передавать файлы в бинарном виде.

В консоли Django

HTTP POST /api/v1/files/ 400 [0.02, 127.0.0.1:33916]


В дебагере браузера ошибка
datafile: ["No file was submitted."]
5d68da9d69630405619753.png
  • Вопрос задан
  • 1210 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы