前端實現附件下載功能


方法一(如果是瀏覽器可識別的文件,可能會被直接打開)

//下載文件
function downLoadFile(fileUrl, fileName) {
    const link = document.createElement('a');
    link.href = fileUrl;
    link.download = fileName; //下載的文件名
    link.click();
},
// downLoadFile('name.txt','文件名');

方法二(通過請求的方式下載文件)

// 保存到本地並自動點擊
function saveAs(data, name) {
    var urlObject = window.URL || window.webkitURL || window;
    var export_blob = new Blob([data]);
    var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
    save_link.href = urlObject.createObjectURL(export_blob);
    save_link.download = name;
    save_link.click();
}
// 下載含有url的文件
function downloadUrlFile(url, fileName) {
    var url2 = url.replace(/\\/g, '/');
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url2, true);
    xhr.responseType = 'blob';
    //xhr.setRequestHeader('Authorization', 'Basic a2VybWl0Omtlcm1pdA==');
    // 為了避免大文件影響用戶體驗,建議加loading
    xhr.onload = function(){
        if (xhr.status === 200) {
            // 獲取文件blob數據並保存
            saveAs(xhr.response, fileName);
        }else {
            Alert('下載文件失敗!')
        }
    };
    xhr.send();
}

downloadUrlFile(fileUrl, fileName);

方法三(使用H5 + plus 瀏覽器會報錯,app則不會,親測Hbuilder打包有效)

//提前加載plus對象
document.addEventListener('plusready',function () {},false);

var dtask = plus.downloader.createDownload(fileUrl, {}, function(d, status){
    // 下載完成
    if(status == 200){ 
        var showSize;
        var kb = Math.round(d.downloadedSize/128);
        showSize = kb + 'kb';
        if(kb > 1024){
            showSize = (kb/1024).toFixed(2) + 'M'
        }
        Alert(d.filename +'</br>'+ '大小: '+showSize ,function(){},'下載成功')
    } else {
        Alert(status + ', 文件下載失敗',function(){},'下載失敗')
    }  
 });
 //dtask.addEventListener("statechanged", onStateChanged, false);
 dtask.start();

下載的文件地址:設備存儲>android>data>plus.+appID(app編號)>downloads


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM