2016-01-05 2 views
0

Я хочу загрузить файл с сервера, и как только пользователь завершит операцию dowload, я хочу удалить его с сервера. Таким образом, для этой цели я использую следующий Jquery плагин:Jquery Загрузить файл PlugIn Not Working

fileDownload

Идея заключалась в том, что я буду удалять файл на его обратного вызова функций. Ниже вы можете найти фрагмент кода:

$.fileDownload(url, { 
       contentType: "application/octet-stream", 
       contentDisposition: 'attachment; filename=' + response.fileName 
       }) 
       .done(function() { 
        console.log('File download a success!'); 
       }) 
       .fail(function() { 
        console.log('File download failed!'); 
       }); 

Таким образом, когда пользователь пытается загрузить файл, следующая ошибка происходит в основном:

  1. Это перезвонит функция не работает должным образом, каждый раз FAIL обратно вызов функции называется
  2. Несмотря на FAIL обратного вызова, вместо загрузки файла, он начинает играть что MP4 файл в окне браузера, и я получаю следующее сообщение об ошибке:

Resource interpreted as Document but transferred with MIME type video/mp4.

Таким образом, в основном есть TWO вопросы:

  1. Каждый раз, когда Сбой обратного вызова вызывается метод
  2. Запись началась ИГРАТЬ в браузере вместо Загрузка

Или, если есть другой альтернативный способ достижения этого? благодаря

ответ

1

Or, If there is any other alternative way to achieve this? thanks

Попробуйте использовать XMLHttpRequest с responseType набором для "blob"

function refocus() {      
    document.body.removeChild(document.getElementById("download")); 
    console.log("File download a success!"); 
    window.removeEventListener("focus", refocus) 
} 

var request = new XMLHttpRequest(); 
request.open("GET", "/path/to/mp4", true); 
request.responseType = "blob"; 
request.onload = function (e) { 
    if (this.status === 200) { 
     // create `objectURL` of `this.response` : `.mp4` as `Blob` 
     var file = URL.createObjectURL(this.response); 
     var a = document.createElement("a"); 
     a.href = file; 
     a.download = this.response.name || "file-" + new Date().getTime(); 
     a.id = "download"; 
     document.body.appendChild(a); 
     a.click(); 
     // remove `a` following `Save As` dialog, 
     // `window` regains `focus` 
     window.addEventListener("focus", refocus, false); 

    } else { 
     console.log("File download failed!") 
    } 
}; 
request.send(); 
+0

спасибо за Ваш ответ. Это решение работает для меня. Существует некоторая проблема с обращением «onerror», поскольку она не работает. Я даю url файла, который не существует на сервере, но вместо обратного вызова ошибки я получаю следующую ошибку в консоли браузера: «Не удалось загрузить ресурс: сервер ответил со статусом 404 (Not Found)» –

+0

Попробуйте переместить 'console.log (« Загрузка файла не удалась! »)' '' '' '' '' 'в' .onload' – guest271314

+0

спасибо, что это сработало. Можете ли вы поделиться браузером с совместимостью этого кода? –