2016-02-26 59 views
0

我正在使用錨標記下載並通過服務器URL我試圖下載媒體文件它在Chrome中正常工作(下載文件)但在IE中, MS Edge和Firefox開始流式傳輸視頻。由於交叉來源錨標記下載不起作用

這是我的代碼:

<a id="lnkDownloadVid" class="btn-download" href="http://cdn.example.com/Media/ATV521Dec16.mp4" download=""> 

我試圖通過jquery的AJAX打URL,我得到了跨域錯誤。

//Create a simple AJAX Request to Google and alert the results 
alert("Request Start"); 
$.ajax({ 
    crossDomain: true, 
    headers: { 
     "Content-Disposition": "attachment; filename=http://cdn.example.com/Media/ATV521Dec16.mp4" 
    }, 
    url: "http://cdn.example.com/Media/ATV521Dec16.mp4", 
    success: function (data) { 
     alert(data); 
    }, 
    error: function() { 
     alert("error"); 
    } 
}); 
alert("Request Ends"); 

我也試過,但仍獲得跨起源錯誤:

var request = createCORSRequest("get", "http://cdn.example.com/Media/ATV521Dec16.mp4"); 
if (request) { 
       // Define a callback function 
       alert("Define a callback function"); 
       request.onload = function() { }; 
       // Send request 
       alert("Send request"); 
       request.send(); 
      } 

任何可能的解決方案,否則我失去了一些東西?我需要下載而不使用服務器端,換句話說就是直接通過URL。 我點擊了按鈕我需要下載文件。它在Chrome中工作,但在IE和Firefox中,當我點擊它開始流式傳輸的按鈕時。

+0

右鍵單擊保存爲 – mplungjan

+0

我需要它在按鈕上工作,只需在IE和Firefox上的按鈕上單擊其開始流式傳輸。 – sam

+0

你需要使用ajax嗎?爲什麼不讓瀏覽器下載文件,並且跨域問題消失... – LDJ

回答

0

download屬性不是由舊的瀏覽器支持 - 在這種情況下,IE <邊緣

enter image description here

除非你可以改變CDN提供的應用程序/八位字節流的頭,我的建議是:

<a id="lnkDownloadVid" class="btn-download" 
href="http://cdn.example.com/Media/ATV521Dec16.mp4" download=""><span 
id="message" style="display:none"> 
If this does not download when clicked, use the context menu 
(normally right click or long click on touch devices) to save 
</span> 
<script> 
$("#lnkDownloadVid").hover(
    function() { $(this).next().show(); },  
    function() { $(this).next().hide(); } 
); 
</script> 
+0

感謝您的建議,但我想強制用戶單擊按鈕進行下載。 我沒有得到下載屬性在Chrome瀏覽器上工作的原因,但沒有在Firefox和IE上顯示。在Firefox和IE中,它開始流式傳輸。 – sam

+0

請參閱更新 – mplungjan

+0

此[鏈接](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download) 表示:此屬性僅適用於鏈接資源與同源。 – sam