Опубликовать приложение Binary Sting в Django с использованием HTML 5 - PullRequest
1 голос
/ 12 октября 2010

Я читаю в файле через HTML5 FileReader и jQuery следующим образом:

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;
};

«Ondrop» используется для обработки перетаскивания элемента, который я назвал «holder».

Файл передается в мое приложение django, и если я просто

print request.raw_post_data

, я вижу двоичный вывод в моей консоли.

Я пытаюсь записать это в файл примерно так (да, в моем тесте это всегда jpg):

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

И файл пишется, но когда я пытаюсь открыть его, онкажется испорченным

Я подозреваю, что это связано с неправильным кодированием request.raw_post_data, но я не совсем уверен, как это исправить ... raw_post_data выглядит как двоичный файл, хотя type () возвращает str

Есть мысли?

1 Ответ

2 голосов
/ 12 октября 2010

этот пост был очень полезен для меня, может быть, он будет полезен и вам

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

В итоге я изменил свой JavaScript на:

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

и вуаля.

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