例如,如果您点击链接:
data:application/octet-stream;base64,SGVsbG8=
浏览器将提示您下载一个文件,该文件由超链接本身中作为base64保存的数据组成.有没有办法在标记中建议默认名称?如果没有,是否有JavaScript解决方案?
例如,这些之间的区别是:
<iframe srcdoc="<p>Some HTML</p>"></iframe>
<iframe src="data:text/html,<p>Some HTML</p>"></iframe>
Run Code Online (Sandbox Code Playgroud)
而且,如果它们完全相同,为什么HTML5会添加srcdoc属性?
编辑
也许我不够清楚.我不是比较src有srcdoc,但src使用text/html的数据URI用srcdoc.
然后,如果功能图是这样的
| src attribute | srcdoc attribute
--------------------------------------------------------------------
URL | Yes | No without using src (*)
HTML content | Yes, using data URI | Yes
为什么srcdoc需要?
(*)注意:
它似乎srcdoc可以用来通过URL(Demo)加载页面,使用带有src属性的子图:
<iframe srcdoc="<iframe src='http://microsoft.com'></iframe>"></iframe>
Run Code Online (Sandbox Code Playgroud) 我正在写一个chrome扩展,它执行以下操作:
XMLHttpRequesttotal_encoded_data<a href=data:application/octet-stream;charset=utf-8;base64,' + total_encoded_data+' download='file.bin'>Click to Download</a>.当total_encoded_data添加使用jQuery HREF.我通过手动二进制搜索发现,如果大小total_encoded_data超过2097100个字符,那么当我点击链接时,我会收到一条Aw,Snap消息.如果尺寸较小,那么我可以按预期下载.
除了测试文件大小之外,我还用来atoi确保base64编码有效,并且它运行时没有错误.
Aw,Snap消息不会产生任何崩溃报告,chrome://crashes也不会产生任何意外输出chrome_debug.log
在提供base64编码的字符串长度大于2097100的数据uri时,如何避免Aw,Snap消息?
我想知道在浏览器中加载的Base64 DataURL图像的最大长度是多少?
谢谢!
我知道SO上已经存在很多与此类问题相关的问题,例如:
这个问题非常适用于iOS 8.1.3上的Safari(移动版,iPad 2+).我们有一个使用Application Cache和IndexedDB的离线AngularJS Web应用程序来存储数据.一种数据是可以相对较大的PDF文档:最大约25兆字节.我们将这些文件存储在IndexedDB中,当用户想要下载它时,我们在浏览器中使用JavaScript将该文件存储在内存中.
当用户想要保存它时,问题就出现了.Safari Mobile可能会因数据URI的大小限制或其他原因而崩溃.
this.save = function (file) {
var mediaType = "application/pdf";
var link = document.createElement("a");
var blob = new Blob([this.fromBase64ToBinary(file.content)], { type: mediaType });
var blobUrl = URL.createObjectURL(blob);
document.body.appendChild(link);
link.download = file.name;
link.href = blobUrl;
link.click();
document.body.removeChild(link);
};
Run Code Online (Sandbox Code Playgroud)
在服务中,我们有一个函数save(file),其中file包含两个属性的对象:
name:文件名;content:文件的数据,基本64编码,然后我们将其转换为二进制.该atob()功能可以是原因?当我在运行此代码的iPad上进行逐步调试时,它会在那里崩溃(即:与行对齐var byteCharacters = atob(b64Data);).
this.fromBase64ToBinary = function (base64) …Run Code Online (Sandbox Code Playgroud) 我正在尝试渲染存储在javascript中的PNG图像Uint8Array.我最初尝试的代码如下:
var imgByteStr = String.fromCharCode.apply(null, this.imgBytes);
var pageImg = new Image();
pageImg.onload = function(e) {
// Draw onto the canvas
canvasContext.drawImage(pageImg, 0, 0);
};
// Attempt to generate the Data URI from the binary
// 3rd-party library adds toBase64() as a string function
pageImg.src="data:image/png;base64,"+encodeURIComponent(imgByteStr.toBase64());
Run Code Online (Sandbox Code Playgroud)
但是,我发现由于某种原因,onload函数从未运行(我在chrome中设置了断点并且它根本就没有命中).我发现如果我将src设置为URL而不是数据URI,它可以正常工作.但是,由于一些限制,我不能直接引用图像的URL,即它必须从中加载UInt8Array.
此外,为了使事情略微复杂化,这些图像的大小可能是兆字节.根据我的阅读,尝试将数据URI用于非常大的图像存在兼容性问题.因此,我对使用它们非常犹豫.
因此,问题是如何在不使用数据URI或直接引用图像URL的情况下将此字节数组作为PNG渲染到画布上下文中?
我也尝试使用类似下面的东西直接使用该putImageData函数操作图像数据.请记住,我并不是100%了解此功能的工作原理
var imgdata = canvasContext.createImageData(this.baseHeight, this.baseWidth);
var imgdatalen = imgdata.data.length;
for(var i=0; i<imgdatalen; i++) {
imgdata.data[i] = _this.imgBytes[i];
}
canvasContext.putImageData(imgdata, 0, 0);
Run Code Online (Sandbox Code Playgroud)
它是从一个我已经关闭的标签的博客中解除的,所以对没有给予适当信用的灵感表示道歉.
此外,在慢慢锤击这件事的同时,我在Chrome中遇到了错误SECURITY_ERR: DOM …
我正在尝试使用AJAX调用下载文件.我需要使用AJAX调用,因为我必须发出一个帖子请求以及我需要从客户端发送一些标题.由于Server API不在我们的控制之下,除了使用AJAX之外,我们没有太多选择.为了显示文件保存对话框,我将字节数组转换为blob到Object URL,如下所示
var oReq = new XMLHttpRequest();
oReq.open("POST","api/operations/zip", true);
oReq.responseType = "arraybuffer";
oReq.onload = function(oEvent) {
var blob=new Blob([oReq.response], {type: 'application/octet-binary'});
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download="myFileName.zip"; link.click();
}
oReq.send(filePaths);
Run Code Online (Sandbox Code Playgroud)
现在我想知道除了浏览器内存限制之外,我们可以在JavaScript中使用Blob大小限制.如果我有大约8 GB RAM,可以下载4 GB文件.
我使用jquery动态表单获得了一些不错的布局生成器,并且jquery ui功能可以更改已使用元素的数量,它们的css属性等.一切看起来都很棒但是当前结果的呈现存在一个问题.我想保存生成的html DOM并以某种方式解析它(从DOM树中删除隐藏的元素等).任何想法如何保存当前(修改)的html + css?
我在Google Chrome中遇到了下载问题.我使用的是Ruby 2.2,Rails 4.2,AngularJS 1.2.
我们这里没有数据库.我们通过API获得的一切.我们试图下载的文件大约是7 MB.它给我们"失败:网络错误".虽然它在Firefox上运行良好.
从API我们获得JSON中的二进制数据.我们正在解析它.然后:
send_data response_fields["attachment"], type: response_fields["mimeType"], disposition: 'attachment', filename: params[:filename]
Run Code Online (Sandbox Code Playgroud)
当我们使用AngularJS时,我们在AngularJS Controller中捕获该值,然后将其转换为:
var str = data;
var uri = "data:" + mimeType + ";base64," + str;
var downloadLink = document.createElement("a");
downloadLink.href = uri;
downloadLink.download = filename;
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
Run Code Online (Sandbox Code Playgroud)
这适用于Firefox甚至Chrome,适用于较小的文件大小.不知道为什么它会在Chrome上为更大的尺寸提供错误.
有什么建议?
谢谢.