Существует ошибка, которая изменяет размер файла, передаваемого из Axios в Django - PullRequest
0 голосов
/ 21 апреля 2019

Я создаю интерфейсный сервер реагирования и бэкэнд-сервер django.

Я перенес файл изображения из фронтэнда реагирования в бэкэнд Django, используя axios.

Однако содержимое файла изображенияв фоновой папке мультимедиа не видно.

Итак, я сравнил размер исходного файла перед передачей и размер переданного файла в папке мультимедиа.

Размер оригиналаразмер файла был 687 687, а размер передаваемого файла был немного увеличен до 68 7 870.

Однако вместо передачи с сервера с внешним интерфейсом

www.localhost: 8000 / admin

Я подключился к администратору серверного сервера django и загрузил файл, и было подтверждено, что он загружен нормально.

Я думаю, что в реакциях axios имеются некоторые фиктивные данные в процессе передачи файлов.

  1. ответный код внешнего интерфейса.
export function uploadFile(file) {
    let url = `${ROOT_URL}/upload/${file.name}`;
    const formData = new FormData();
    formData.append('file', file)
    const config = { headers: { 'Content-Type': 'multipart/form-data' } };
        return (dispatch) => {
            axios.post(url, formData).then(response => {
            dispatch({
                type: UPLOAD_FILE,
                payload: response
            })
        })

код базы данных остальной части django

  • models.py
class File(models.Model):
    file = models.FileField(blank=False, null=False)
    def __str__(self):
        return self.file.name
  • serializer.py
class FileSerializer(serializers.ModelSerializer):
    class Meta:
        model = File
        fields = ("__all__")
  • views.py
class FileUploadView(CreateAPIView):
    parser_classes = (FileUploadParser, )

    def post(self, request, filename, format=None):
        file_serializer = FileSerializer(data=request.data)
        file_obj = request.data['file']
        print(file_obj.size)

        if file_serializer.is_valid():
            file_serializer.save()
            return Response(file_serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(file_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Я хочу знать, почему объем файла увеличился и почему он поврежден.Справка.

=====================================================

Изображение, Сравните шестнадцатеричные данные двух файлов

Загрузите изображение, сравнивая шестнадцатеричные значения обоих файлов

Шестнадцатеричные данные перед переданным файлом.

content-disposition: form-data;name = "" ..........

Кажется, что это данные, которые передаются.Не PNG-файл.

То же самое происходило при передаче файлов на почтальон, а также на реагирование.

Я думаю, что мне нужно изменить код в бэкэнде django.Пожалуйста, помогите мне.

1 Ответ

1 голос
/ 22 апреля 2019
parser_classes = (FileUploadParser, )

я удалил этот код на views.py, и он работает.

===============================================

и.я пробовал много способов.

from django import forms
from .models import File

class FileForm(forms.ModelForm):
    class Meta:
        model = File
        fields = ('file', )

создать FileForm.

def fileUpload(request):
    form = FileForm(request.POST, request.FILES)
    form.save()

это также работает.

На этот раз, кажется, есть шанс прочитать документ DRFподробно в django.

Надеюсь, эта статья поможет.Для новых разработчиков, таких как я

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...