2010-10-12 9 views
1

J'ai lu dans un fichier via HTML5 FileReader et jQuery comme ceci:post binaire Sting à l'application Django en utilisant HTML 5

holder.ondrop = function(e) { 
    this.className = ''; 
    e.preventDefault(); 

    var file = e.dataTransfer.files[0], 
    reader = new FileReader(); 

    reader.onloadend = function(event) { 
     $.ajax({ 
     url:"/path/to/upload", 
     type: "POST", 
     data: event.target.result, 
     success: function(data, status, xhr) { 
     alert("success!"); 
     }, 
     error: function(xhr, status, error) { 
     alert("fail") 
     }, 
     }); 
    }; 

    reader.readAsBinaryString(file); 
    return false; 
}; 

Le « ondrop » est utilisé pour gérer le glisser-déposer sur un élément que j'ai nommé "titulaire".

Le fichier est soumis à mon application django, et si je simplement

print request.raw_post_data 

Je vois sortie binaire dans ma console.

J'essaie d'écrire à un fichier comme si (oui dans mon test, il est toujours un jpg):

f = open('/tmp/file.jpg', 'wb') 
f.write(request.raw_post_data) 
f.close() 

Et le fichier est écrit, mais lorsque je tente de l'ouvrir, il semble corrompu.

Mon soupçon est que cela a quelque chose à voir avec request.raw_post_data mal codé mais je ne suis pas sûr de la façon de le corriger ... raw_post_data ressemble à binaire bien que type() retourne str.

Des pensées?

Répondre

2

ce poste était vraiment utile pour moi, ce sera peut-être utile pour vous aussi

http://hacks.mozilla.org/2010/06/html5-adoption-stories-box-net-and-html5-drag-and-drop/

J'ai fini par changer mon javascript est:

holder.ondrop = function(e) { 
     e.preventDefault(); 

     var file = e.dataTransfer.files[0]; 
     var request = new XMLHttpRequest(); 

     request.open("POST", upload_url, true); // open asynchronous post request 
     request.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 
     request.send(file);   
    }; 

et le tour est joué.

Questions connexes