为什么我的AJAX文件下载,使用基于Blob的对象url,破坏文件
Why is my AJAX file download, using Blob based object URLs, corrupting files?
我需要构建允许用户从经过身份验证的REST服务下载文件的功能。对文件的GET请求必须使用设置为oauth访问令牌的"Authorization"头。我使用超级代理库通过AJAX发出这个请求没有问题,但是将返回的文件转换为可下载的链接就有问题了。这是我目前正在使用的。
api.getFile(file.name, function (err, res) {
var windowUrl = window.URL || window.webkitURL;
var blob = new Blob([res.text], {type: res.type});
var dataUrl = windowUrl.createObjectURL(blob);
callback(dataUrl);
});
我请求文件。获得正确的窗口。基于浏览器的URL对象。用作为res.text返回的文件内容和作为res.type返回的mime类型创建一个blob。使用windowUrl对象从blob创建对象URL。然后回调保存此数据url,以便我可以创建如下链接。
<a href={file.dataUrl} download={file.name} target="_blank">{file.name}</a>
此策略适用于简单的基于文本的文件类型,如。txt或。json,但对于更复杂的类型会导致问题。经过此过程后png将无法打开并抛出一般损坏错误。我也试过用PDF,它打开并有正确的页数,但内容是空白的。
我还验证了REST服务不会通过curl下载各种文件而导致损坏。
你知道会发生什么吗?如果有更好的选择,我也愿意采用其他策略进行身份验证文件下载。
我能够通过不同的策略获得经过身份验证的下载。当用户单击下载链接时,不是对文件内容发出请求,而是对单个使用访问令牌发出请求以下载该文件。然后将令牌设置为文件url上的查询参数,然后使用
自动触发该查询参数进行下载。window.open(url);
我的特殊问题已经解决了,但我仍然好奇是否有一种方法可以使用我以前的策略而不会出现腐败问题。
相关文章:
- 在URL中传递JS对象
- 遍历 JSON 对象并检查 URL 是否以某个值结尾
- 如何仅在对象URL's已下载
- Mapbox JS,来自URL的GeoJSON featureCollection对象只添加了一个标记
- Android上的Chrome无法播放来自对象URL的录制音频
- 读取在具有IE的工作程序中生成的对象URL
- 将URL字符串${userid}替换为javascript对象中的实际用户id
- 如何使用 Backbone 读取通过同一 REST URL 返回的两个不同对象
- 我的 AJAX 请求对象无法正确解析 URL 的协议部分
- 向jQueryajax调用添加参数,最好添加到URL或对象中
- 从url对对象进行角度编码和解码
- 如何使用API URL的JSON.parse将JSON字符串更改为Javascript对象
- 如何从每个对象获取jQuery的“title”和“url”值
- 如何用php url返回的JSON对象填充表
- 如何从JSON对象部分获取URL
- 将模型/对象放在Http Get-URL上
- 通过url将jsonArray传递给mvc控制器,无法获取对象
- 用于从许多带有“for”循环的URL中获取HTML信息的X射线使对象未定义
- 选择基于 UI 路由器 URL 的 JSON 对象
- 使用给定的URL和密钥将JSON对象提取到jQuery ajax中