我有以下要求。我使用AngularJS,JavaScript。 1.用户在浏览器中单击文档。我得到文档路径并打开它。 >> window.open(documentpath); 2.但是保存在目录中的文档将文件名替换为Id和NO扩展名。 ABC /文件/ 4 3.实际文件名在数据库中为Id:4文件名:Hello.pdf
因此,当我打开文件时,我得到abc / files / 4,其中没有格式,并且它不会打开文件。
如何使用正确名称abc / files / Hello.pdf打开文件?
1,我想走路径abc / files / 4,我不想下载文件。只需将其存储在本地某处(如cache / Temp)以获取文件内容并将4重命名为Hello.pdf,然后在浏览器中将其打开。所有这些都应该在后台进行,并且应该在用户点击它时正确打开文件。
是否可以使用JavaScript,AngularJS?请让我知道
答案 0 :(得分:1)
出于安全原因,JavaScript通常无法访问本地文件系统。
您需要做的是将文件名与HTTP响应一起传递。为此,请将此标头添加到响应中:
Content-Disposition: inline; filename="Hello.pdf"
另见:
答案 1 :(得分:0)
这将允许您使用异步请求下载文件并在base64编码的数据URL中打开它。它WONT设置名称,只需将显示强制为pdf。如果您无法访问服务器并且无法实现无限更好的Aaron Digulla方法,则可以使用此方法。
/**
*
* jquery.binarytransport.js
*
* @description. jQuery ajax transport for making binary data type requests.
* @version 1.0
* @author Henry Algus <henryalgus@gmail.com>
*
*/
$.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);
});
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;