2017-02-22 1 views
0

Ich habe ein Problem beim Senden eines Dateiobjekts an Python durch einen Ajax-Aufruf.
Ich benutze Dropzone nur als meine "Datei-Uploader-Schnittstelle" und ich sende einen Anruf, wenn bestimmte Taste gedrückt wird.Datei von Javascript an Python über Ajax senden

In Python, wenn ich versuche, die Datei zu verarbeiten, heißt es " 'str' Objekt kein Attribut 'suchen'"

Mein JS-Code:

... 
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"); 
     } 
    }); 
} 

Mein Python-Code:

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) 

Ich habe dies im Internet gesucht und noch nichts gefunden.

Sorry für das arme Englisch.

Vielen Dank im Voraus!

Antwort

1

seek ist eine Methode für Dateiobjekte, keine Zeichenfolgen.

Ich denke, Ihr Code-Snippet ein paar Zeilen fehlt, aber wenn file soll die Datei zu spitz sein von file_path dann sollten Sie zuerst mit file = open(file_path, 'rb') die Datei öffnen. Neue Dateiobjekte sollten an der 0. Position beginnen, so dass file.seek(0) unnötig sein sollte.