Пересланная файл посредством ajax с более чем одним параметром

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

Клиент

    $.ajax({
                        type : "POST",
                        url : "/Incidencia/uploadFile/",
                        processData:false,
                        contentType : false,
                        enctype: 'multipart/form-data',
                        dataType: 'json',
                        headers : {
                            "X-CSRFToken": getCookie("csrftoken")
                        },
                        data: {
                            file:$(currentInput).val(),
                            CodigoAuto:$("#id_CodigoAuto").val(),
                        },
                        success: function(result) {
                            $(currentInput).parent().find("i").removeClass("fa-spinner").removeClass("fa-spin").addClass("fa-check");
                        },
                        error: function(result) {
                            $(currentInput).parent().find("i").removeClass("fa-spinner").removeClass("fa-spin").addClass("fa-exclamation-triangle");
                        },

Server

def uploadFile(request):
    print request.POST
    fil = request.POST.get("file")

Согласно консоли сервера доказательств django она объект request прибывает пустота. Я поместил параметры json с и без кавычек, из-за которых в Интернете я это нашел двух форм, но оно не функционирует ни одной. Привет и спасибо заранее

0
задан 16.01.2017, 16:34
0 ответов

Проблемы

  1. Ты посылаешь файлы в формате JSON, когда файл послан в бинарной форме. Ты можешь посылать бинарный файл в JSON, если ты это конвертируешь в Base64.

    data: {
      file: $(currentInput).val(),
      CodigoAuto:$("#id_CodigoAuto").val(),
    }
    
  2. Ты посылаешь фальшивый маршрут файла больше не файл в себе. Файлы хранятся в свойстве files.

    file: $(currentInput).val() // /home/fakepath/fichero.xyz
    

Так ты не получишь файл в request.FILES (даже не эквивалент в любом языке).

Решения

  1. Простое решение состоит в том, чтобы посылать один FormData¹ с файлом и данными, которых хотят.

    let data = new FormData();
    data.append('file', currentInput.files[0]);
    data.append('codigoAuto', $('#id_CodigoAuto').val());
    

    Таким образом что ты посылаешь вышеупомянутый объект вместо JSON:

    {
      ...
      data: data
      ...
    }
    
  2. Посылать файл в Base64 используя FileReader² для Вашего превращения.

    function fileToBase64(file, cb) {
      const reader = new FileReader();
      reader.readAsDataURL(file);
      reader.onload = function () {
        cb(reader.result);
      };
    }
    

¹, если ты используешь выбор contentType to false ты не нуждаешься в том, чтобы добавить тип даты посредством enctype.

² совместимый com IE 10 +, Firefox 3.6 +, Chrome 7 +, Safari 6.0.2 +.

1
ответ дан 03.12.2019, 17:40