2017-01-26 58 views
0

我有如下要求。我用戶AngularJS,JavaScript。 1.用戶點擊瀏覽器中的文檔。我得到文檔路徑並打開它。 >> window.open(documentpath); 2.但保存在目錄中的文檔將文件名替換爲Id和NO擴展名。 abc/files/4 3.實際的文件名是在數據庫中,如下所示:4文件名:Hello.pdf在瀏覽器中打開時重命名文件

所以當我打開文件時,我得到了沒有格式的abc/files/4不打開文件。

如何以正確的名稱打開文件abc/files/Hello.pdf?

1,我想採取路徑ABC /文件/ 4,我不想下載文件。只需將它存儲在本地緩存/臨時文件中即可獲取文件內容,並將其重命名爲Hello.pdf,然後在瀏覽器中打開它。所有這些都應該在後臺進行,並且應該在用戶點擊它時正確打開文件。

是否有可能使用JavaScript,AngularJS?請讓我知道

+0

你不想下載的文件,但它存儲的文件夾中?這是下載。 – Lucero

回答

0

這將讓你下載的文件,異步請求並在base64編碼的數據url中打開它。它設置了名稱,只是強制顯示爲pdf。如果您無法訪問您的服務器並且無法實現Aaron Digulla方法,那麼您可以使用此方法,該方法的性能更好。

/** 
 
* 
 
* jquery.binarytransport.js 
 
* 
 
* @description. jQuery ajax transport for making binary data type requests. 
 
* @version 1.0 
 
* @author Henry Algus <[email protected]> 
 
* 
 
*/ 
 
$.ajaxTransport("+binary", function(options, originalOptions, jqXHR) { 
 
    // check for conditions and support for blob/arraybuffer response type 
 
    if (window.FormData && ((options.dataType && (options.dataType == 'binary')) || (options.data && ((window.ArrayBuffer && options.data instanceof ArrayBuffer) || (window.Blob && options.data instanceof Blob))))) { 
 
    return { 
 
     // create new XMLHttpRequest 
 
     send: function(headers, callback) { 
 
     // setup all variables 
 
     var xhr = new XMLHttpRequest(), 
 
      url = options.url, 
 
      type = options.type, 
 
      async = options.async || true, 
 
      // blob or arraybuffer. Default is blob 
 
      dataType = options.responseType || "blob", 
 
      data = options.data || null, 
 
      username = options.username || null, 
 
      password = options.password || null; 
 

 
     xhr.addEventListener('load', function() { 
 
      var data = {}; 
 
      data[options.dataType] = xhr.response; 
 
      // make callback and send data 
 
      callback(xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders()); 
 
     }); 
 

 
     xhr.open(type, url, async, username, password); 
 

 
     // setup custom headers 
 
     for (var i in headers) { 
 
      xhr.setRequestHeader(i, headers[i]); 
 
     } 
 

 
     xhr.responseType = dataType; 
 
     xhr.send(data); 
 
     }, 
 
     abort: function() {} 
 
    }; 
 
    } 
 
}); 
 

 
var blobToBase64 = function(blob, cb) { 
 
    var reader = new FileReader(); 
 
    reader.onload = function() { 
 
    var dataUrl = reader.result; 
 
    var base64 = dataUrl.split(',')[1]; 
 
    cb(base64); 
 
    }; 
 
    reader.readAsDataURL(blob); 
 
}; 
 

 
$.ajax("Description.pdf", { 
 
    dataType: "binary" 
 
}).done(function(data) { 
 
    blobToBase64(data, function(base64encoded) { 
 
    window.open("data:application/pdf;base64," + base64encoded); 
 
    }); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

我不想將文件格式默認爲pdf。我想從DB獲取實際的文件名和格式,並重命名返回的實際文件。 –