![](/img/trans.png)
[英]Convert array of byte values to base64 encoded string and break long lines, Javascript (code golf)
[英]JavaScript code to display PDF file in browser from byte array (not base64 encoded)
我正在使用ASP .NET Web API,其中该API的POST函数返回一个字节数组,如C#代码中所示:
return Ok(outputStream.ToArray());
其中outputStream是System.IO.MemoryStream类型,并且ToArray()返回一个字节数组。
此功能返回一个PDF流,我想在用户的浏览器中显示该PDF流,或者至少让他们保存它。
我遍历了Stack Overflow的一个JavaScript 示例 ,该示例演示了如何从Base64编码的字符串中获取Blob并进行显示,当API返回Base64编码的字符串时,我能够使其工作; 但是,当API返回如前所示的字节数组时,我无法使其工作。
我可以得到一些代码示例,说明如何在API返回字节数组时使其工作吗?
我的JQuery Ajax POST请求看起来像:
function LoadPDF() {
var args = [];
var x = $.ajax({
type: "POST",
url: "DirectoryQuery.aspx/GetFullPdf",
contentType: "application/json; charset=UTF-8",
responseType: "text/plain; charset=UTF-8",
async: true,
dataType: "json",
processData: "false",
success: OnSuccess,
error: OnErrorCall
});
function OnSuccess(response) {
var byteArray = new Uint8Array(response.d);
saveTextAsFile("document.pdf", byteArray);
}
function OnErrorCall(response) {
console.log(response);
//location.reload();
}
}
尝试使用file-save-as.js,如下所示:
function saveTextAsFile(fileNameToSaveAs, textToWrite) {
/* Saves a text string as a blob file*/
var ie = navigator.userAgent.match(/MSIE\s([\d.]+)/),
ie11 = navigator.userAgent.match(/Trident\/7.0/) && navigator.userAgent.match(/rv:11/),
ieEDGE = navigator.userAgent.match(/Edge/g),
ieVer = (ie ? ie[1] : (ie11 ? 11 : (ieEDGE ? 12 : -1)));
if (ie && ieVer < 10) {
console.log("No blobs on IE ver<10");
return;
}
var textFileAsBlob = new Blob([textToWrite], {
type: 'text/plain'
});
if (ieVer > -1) {
window.navigator.msSaveBlob(textFileAsBlob, fileNameToSaveAs);
} else {
var downloadLink = document.createElement("a");
downloadLink.download = fileNameToSaveAs;
downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
downloadLink.onclick = function (e) { document.body.removeChild(e.target); };
downloadLink.style.display = "none";
document.body.appendChild(downloadLink);
downloadLink.click();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.