2017-02-22 23 views
0

У меня возникла проблема отправки объекта файла на python через вызов ajax.
Я использую Dropzone так же, как мой «интерфейс загрузчика файлов», и я посылаю вызов при нажатии определенной кнопки.Отправить файл с javascript на Python через Ajax

В Python, когда я пытаюсь обработать файл, он говорит " 'ул' объект не имеет атрибута" искать"

Мой JS код:

... 
window.$form_add_file = $("#form_add_file"); 
var file = dropzone.files[0]; 
... 

var formData = $form_add_file.serializeArray(); 

if(file){ 

    $modal_add_file.find($drop_add_file).removeClass("error"); 

    var filetype = file.type.split("/")[0].toLowerCase(); 
    var hasFile = checkFileType(filetype); 
    if(!hasFile) { filetype = "file" } 

    formData.push(
     { name: "file", value: file }, 
     { name: "file_type", value: filetype }, 
     { name: "file_name", value: file.name }, 
     { name: "file_size", value: file.size } 
    ); 

} else { 
    error = true; 
    $modal_add_file.find($drop_add_file).addClass("error"); 
    return false; 
} 

if(!error){ 
    $.ajax({ 
     method: "POST", 
     url: host + "json.references.new", 
     data: formData, 
     cache: false, 
     dataType: 'json', 
     success: function(data){ 
      if(data){ 
       if(data.error){ 
        modalMessage($modal_add_file, data.error, "ok"); 
       } else { 
        refreshData(data); 
       } 
      } 
     }, 
     error: function(error){ 
      modalMessage($modal_add_file, oops_message, "ok"); 
     } 
    }); 
} 

Мой Python код:

try: 

    file_path = os.path.join(path, file_name) 
    temp_file_path = file_path + '~' 
    file.seek(0) # error happen here 
    with open(temp_file_path, 'wb') as output_file: 
     shutil.copyfileobj(file, output_file) 
    os.rename(temp_file_path, file_path) 

Я искал это в Интернете и ничего не нашел.

Извините за плохой английский.

Заранее благодарен!

ответ

1

seek - метод для файловых объектов, а не строк.

Я думаю, что ваш фрагмент кода отсутствует несколько строк, но если file должен быть файл, на который указывает file_path, то вы должны сначала открыть файл с file = open(file_path, 'rb'). Новые файловые объекты должны начинать чтение на 0-й позиции, поэтому file.seek(0) не нужно.