Я сделал стандартную API для загрузки файлов (docx, pdf, rtf) на сервер. В стандартном интерфейсе DRF загрузка отрабатывает как положено.
models.pyclass 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.pyclass 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.pyclass 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."]