相关疑难解决方法(0)

使用Javascript下载二进制文件

我想使用Javascript下载二进制文件.

我有一个REST服务,它返回二进制数据,我想知道它是否可以显示二进制文件,无论文件扩展名如何.

这是我目前的代码:

var xhr = new XMLHttpRequest;
xhr.open("GET", requestUrl);
xhr.addEventListener("load", function () {
    var ret = [];
    var len = this.responseText.length;
    var byte;
    for (var i = 0; i < len; i++) {
        byte = (this.responseText.charCodeAt(i) & 0xFF) >>> 0;
        ret.push(String.fromCharCode(byte));
    }
    var data = ret.join('');
    data = "data:application/pdf;base64," + btoa(data);

    window.open(data, '_blank', 'resizable, width=1020,height=600');
}, false);

xhr.setRequestHeader("Authorization", "Bearer " + client.accessToken);
xhr.overrideMimeType("octet-stream; charset=x-user-defined;");
xhr.send(null);
Run Code Online (Sandbox Code Playgroud)

谢谢!

javascript

21
推荐指数
1
解决办法
4万
查看次数

请求具有自定义标头的文件

我有一个不寻常的要求.基本上我需要一种方法,以便当用户点击链接或按钮时,他们将收到PDF.这里棘手的部分是服务器根本不处理请求,除非与它一起发送自定义标头(否则它认为该人注销并将其发送到登录屏幕).

目前标题的工作方式无法改变,所以请不要纠缠于此; 它将来会改变,是一个我无法控制的内部应用程序.

我探讨的选项:

  • 使用iframe或只是打开一个新窗口,其中包含将返回PDF的某种路径.这不起作用,因为我无法为PDF指定所需的标题,并且在到达PDF本身之前会被重定向.
  • 使用表单并提交请求无法正常工作,因为我无法向表单添加任何自定义标题(只有XHR和插件可以,AFAIK).
  • 使用XHR无法正常工作,因为虽然它可以添加标头并检索文件,但无法将其保存在客户端.

看来我此时唯一的选择基本上是:

  • 使用某种插件(如Flash或Silverlight)来请求该文件.
  • 强制要求的更改比预期更早,以便不再需要标头.

这里有什么我想念的吗?我希望有人可以验证我的发现或指出我错过的东西,因为据我所知,我在这里没有什么可以做的.

编辑:这似乎很容易确认我在想什么:XMLHttpRequest在浏览器中打开PDF

html javascript forms header http

17
推荐指数
1
解决办法
1万
查看次数

html5在Google Chrome中支持

我正在尝试使用这里saveAs解释的接口

目前,我只担心谷歌Chrome,我使用最新的金丝雀(版本27.0.1429.0金丝雀)

Qn1:文章说.

W3C File API包含一个FileSaver接口,它可以将生成的数据保存为saveAs(数据,文件名),但不幸的是它最终会从规范中删除.

为什么会被删除?

Qn2:代码下方.

if (window.saveAs) {
    window.saveAs(blob, name);
}else{
    console.log("saveAs not supported")
}
Run Code Online (Sandbox Code Playgroud)

版画

saveAs not supported 
Run Code Online (Sandbox Code Playgroud)

所以chrome不支持saveAs.这不是我在网上阅读过很多文章的印象.

html5 google-chrome html5-filesystem

13
推荐指数
1
解决办法
4万
查看次数

IE(HTTPS):从php文件生成pdf不起作用

这是我的问题.我正在尝试调用页面:foo.php?docID = bar并将PDF返回到屏幕,该屏幕在数据库中存储为BLOB.

以下是我的代码中实际返回PDF的部分:

$docID = isset($_REQUEST['docID']) ? $_REQUEST['docID'] : null;

if ($docID == null){
    die("Document ID was not given.");
}

$results = getDocumentResults($docID);

if (verifyUser($user, $results['ProductId'])){
    header('Content-type: application/pdf');
    // this is the BLOB data from the results.
    print $results[1];
}
else{
    die('You are not allowed to view this document.');
}
Run Code Online (Sandbox Code Playgroud)

这在Firefox中运行得非常好.

但是,在IE中,它根本没有显示任何内容.如果我在另一个页面(即google.com),并输入网址转到此页面,它会说已经完成,但我仍然会在屏幕上显示google.com.

我检查了来自firefox和IE的响应的标题.它们完全相同.

有没有人有什么建议?需要更多信息?

编辑:如果它有帮助,这里是响应标题和内容的第一行:

HTTP/1.1 200 OK
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 349930
Content-Type: application/pdf
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Server: …
Run Code Online (Sandbox Code Playgroud)

php pdf https internet-explorer

11
推荐指数
1
解决办法
1万
查看次数