Кто-нибудь знает, как отправить это через ajax?

Это pandauploader pandastream. За исключением того, что я хочу, чтобы он был отправлен через AJAX. Кто-нибудь знает, как я мог бы преобразовать это?

:javascript
  $("#returned_video_id").pandaUploader(#{Panda.signed_params('post', "/videos.json", :profiles => 'f1eb0fe2406d3fa3530eb7324f410789').to_json}, {
    onsuccess: function(){
      $(".opened_photo").fadeTo(200, 0, function() {
        $(".opened_photo").hide();
        $(".media_lib").fadeIn();
      });
    },
    upload_progress_id: "upload_progress",
    allowed_extensions: ['AAC', 'AVI', '3GP', 'FLV', 'MOV', 'MP3', 'MP4', 'MPEG', 'OGG', 'WAV', 'WEBM', 'WMA', 'WMV',
      'aac', 'avi', '3gp', 'flv', 'mov', 'mp3', 'mp4', 'mpeg', 'ogg', 'wav', 'webm', 'wma', 'wmv']
  });

1 ответ

Решение

multipart/form-data загрузка файлов не может быть отправлена ​​через XMLHttpRequest. Это связано с тем, что тело запроса всегда отправляется в виде строки, закодированной как UTF-8. Вы не можете отправить сырой двоичный файл.

Если вы пишете пользовательский получатель загрузки, ожидающий его, вы можете кодировать содержимое файла внутри текста, используя схему, подобную base-64. Но это сделает загрузку больше (и, следовательно, медленнее), и в любом случае вы можете читать файлы из JavaScript только в тех браузерах, которые поддерживают новый File API.

Я не знаю о 'pandastream', но выгрузка HTML-файла без перезагрузки страницы обычно осуществляется путем отправки формы с target указал на <iframe>, по этой причине.

(Кстати, allowed_extensions не очень хорошая идея. Помимо отсутствующих возможностей регистра и других отсутствующих возможных расширений, на платформах, отличных от Windows, тип файла может не иметь ничего общего с расширением.)

Другие вопросы по тегам