我有要写入文件的数据,并打开文件对话框供用户选择保存文件的位置.如果它适用于所有浏览器会很棒,但它必须在Chrome中运行.我想在客户端做到这一点.
基本上我想知道在这个函数中放什么:
saveFile: function(data)
{
}
Run Code Online (Sandbox Code Playgroud)
在函数接收数据的情况下,用户是否选择保存文件的位置,并使用该数据在该位置创建文件.
使用HTML也很好,如果有帮助的话.
我想点击按钮时发送"ajax下载请求",所以我试着这样做:
JavaScript的:
var xhr = new XMLHttpRequest();
xhr.open("GET", "download.php");
xhr.send();
Run Code Online (Sandbox Code Playgroud)
的download.php:
<?
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename= file.txt");
header("Content-Transfer-Encoding: binary");
readfile("file.txt");
?>
Run Code Online (Sandbox Code Playgroud)
但是没有按预期工作,我该怎么办?先感谢您
我试图从二进制流构建一个PDF文件,我收到它作为Ajax请求的响应.
通过XmlHttpRequest我收到以下数据:
%PDF-1.4....
.....
....hole data representing the file
....
%% EOF
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试的是通过嵌入我的数据data:uri.现在,它没有任何问题,它工作正常.不幸的是,它在IE9和Firefox中不起作用.可能的原因可能是FF和IE9在使用时遇到了问题data-uri.
现在,我正在寻找适用于所有浏览器的解决方案.这是我的代码:
// responseText encoding
pdfText = $.base64.decode($.trim(pdfText));
// Now pdfText contains %PDF-1.4 ...... data...... %%EOF
var winlogicalname = "detailPDF";
var winparams = 'dependent=yes,locationbar=no,scrollbars=yes,menubar=yes,'+
'resizable,screenX=50,screenY=50,width=850,height=1050';
var htmlText = '<embed width=100% height=100%'
+ ' type="application/pdf"'
+ ' src="data:application/pdf,'
+ escape(pdfText)
+ '"></embed>';
// Open PDF in new browser window
var detailWindow = window.open ("", winlogicalname, winparams);
detailWindow.document.write(htmlText);
detailWindow.document.close();
Run Code Online (Sandbox Code Playgroud)
正如我所说,它适用于Opera和Chrome(Safari尚未经过测试).使用IE或FF将显示一个空白的新窗口.
是否有任何解决方案,如在文件系统上构建PDF文件,以便让用户下载它?我需要适用于所有浏览器的解决方案,至少在IE,FF,Opera,Chrome和Safari中.
我无权编辑Web服务实现.所以它必须是客户端的解决方案.有任何想法吗?
此问题与旧浏览器中的如何更新(与Safari 5.1.4相关)有关并受其启发
给定一个<input type="file">具有元件files包含属性File从继承的对象Blob,是有可能创造一个ArrayBuffer和转换ArrayBuffer到一个data URI从一个Blob或File对象,而无需使用FileReader?
到目前为止已尝试过方法
WebSocket使用.binaryTypeset 创建一个mock "arraybuffer",创建一个MessageEventwith event.dataset to Fileobject; 结果是处理程序的File对象onmessage
设置原型File为ArrayBuffer,Uint8Array; 结果是Uncaught TypeError: Method ArrayBuffer.prototype.byteLength called on incompatible receiver #<ArrayBuffer>(),Uncaught TypeError: Method get TypedArray.prototype.byteLength called on incompatible receiver [object Object]()
设置File在 …
我想知道是否有可能将数据从javascript流式传输到浏览器的下载管理器.
使用webrtc,我将数据(从文件> 1Gb)从浏览器传输到另一个.在接收器端,我将所有这些数据存储到内存中(作为arraybuffer ...所以数据基本上仍然是块),我希望用户能够下载它.
问题: Blob对象的最大大小约为600 Mb(取决于浏览器),因此我无法从块中重新创建文件.有没有办法流式传输这些块,以便浏览器直接下载它们?
我正在尝试让浏览器下载从ajax响应中收到的pdf文件.
灵感来自使用jquery ajax下载pdf文件我模拟了这样的点击/下载事件:
var req = new XMLHttpRequest();
req.open("POST", "/servicepath/Method?ids=" + ids, true);
req.responseType = "blob";
req.onreadystatechange = function () {
if (req.readyState === 4 && req.status === 200) {
var blob = req.response;
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "PdfName-" + new Date().getTime() + ".pdf";
link.click();
}
};
req.send();
Run Code Online (Sandbox Code Playgroud)
不幸的是,这仅适用于Chrome,但不适用于Firefox + IE.当我尝试在最后两个浏览器中触发它时没有任何反应.
该脚本和标记被放置在iframe中,由于从CMS继承,但我不知道是否有任何影响的.
如何为所有现代浏览器优化它?
我有一个 Node.js 端点,当使用以下命令访问时,它会正确触发任意大的文件下载:
response.setHeader('Content-disposition', 'attachment; filename=' + fileName);
response.set('Content-Type', 'text/csv');
response.status(200);
result.pipe(response);
Run Code Online (Sandbox Code Playgroud)
其中result是变换流,response是Express 对象。
当直接访问 Chrome、Firefox、Internet Explorer 等中的端点时,此方法工作正常。问题是在启用基于令牌的身份验证时尝试访问端点而产生的。
从用户的角度来看,当他们单击按钮时,就会下载文件。
如何使按钮使用请求标头中的正确身份验证令牌命中此端点并导致下载文件?
当用户单击该按钮时,它会触发由 redux-api-middleware 处理的操作,该操作GET向端点发出请求(身份验证令牌自动包含在请求中)。该中间件将响应保存在一个变量中,该变量由 React 组件获取。在此 React 组件中,如果正在使用的浏览器(即 Chrome 和 Opera)支持流,response.body则会存在,因此您可以执行如下操作。
if (response.body) {
const csvReader = response.body.getReader();
const textDecoder = new TextDecoder();
const processCsvRow = (csvRow) => {
if (csvRow.done) {
console.log('Finished downloading file.');
return Promise.resolve();
}
// Write to new file for user to download …Run Code Online (Sandbox Code Playgroud)在我的 javascript 中,我有以下内容:
let person = document.createElement('person');
let name = document.createElement('name');
let surname = document.createElement('surname');
person.appendChild(name);
person.appendChild(surname);
let xml = person;
Run Code Online (Sandbox Code Playgroud)
如何将“xml”变量保存在文件中(仅使用 javascript)?OBS:内容不应以单行形式呈现,而应以树状结构呈现:
<person>
<name></name>
<surname></surname>
</person>
Run Code Online (Sandbox Code Playgroud) 我可以在 Chrome 中使用 AngularJS 下载 PDF,但这似乎不适用于最新的 FireFox、Internet Explorer 11 或 Edge(假设它也不适用于 IE10),而且我知道IE9 需要垫片。如果有人有意见,不知道这是否是最好的垫片,但目前它似乎不起作用。我有一个应答式的试了一下blob,并arraybuffer只是在做一个差的情况下,它没有。
所有这些都与caniuse指示的使用 Blob URL相悖。任何人都可以在 IE9 及更高版本以及 FF 的最后几个版本中使用它,并且可以指出我做错了什么?
$http({
url: '/api/v1/download',
method: 'GET',
responseType: 'blob' // or 'arraybuffer'
}).then(function (response) {
// Use the Blob object to create an object URL to download the file
var url = URL.createObjectURL(response.data);
// var url = URL.createObjectURL(new Blob([response], {type: 'application/pdf'})); // arraybuffer version
// Create an anchor to perform download, but …Run Code Online (Sandbox Code Playgroud)