我知道有很多这方面的问题,但我需要使用JavaScript来做到这一点.我正在使用Dojo 1.8并拥有数组中的所有属性信息,如下所示:
[["name1", "city_name1", ...]["name2", "city_name2", ...]]
Run Code Online (Sandbox Code Playgroud)
知道如何将其导出到CSV客户端吗?
我有一个WebApi/MVC应用程序,我正在开发一个angular2客户端(以取代MVC).我在理解Angular如何保存文件时遇到了一些麻烦.
该请求是确定的(正常工作与MVC,我们可以登录接收到的数据),但我无法弄清楚如何保存下载的数据(我主要是遵循同样的逻辑这篇文章).我确信这是非常简单的,但到目前为止,我根本不理解它.
组件功能的代码如下.我尝试过不同的方案,则斑的方法应该是,据我了解的路要走,但没有作用createObjectURL在URL.我甚至找不到URL窗口中的定义,但显然它存在.如果我使用该FileSaver.js模块,我会得到同样的错误.所以我猜这是最近发生的变化或者尚未实施.如何在A2中触发文件保存?
downloadfile(type: string){
let thefile = {};
this.pservice.downloadfile(this.rundata.name, type)
.subscribe(data => thefile = new Blob([data], { type: "application/octet-stream" }), //console.log(data),
error => console.log("Error downloading the file."),
() => console.log('Completed file download.'));
let url = window.URL.createObjectURL(thefile);
window.open(url);
}
Run Code Online (Sandbox Code Playgroud)
为了完整起见,获取数据的服务如下,但它唯一做的是发出请求并传递数据而不进行映射(如果成功):
downloadfile(runname: string, type: string){
return this.authHttp.get( this.files_api + this.title +"/"+ runname + "/?file="+ type)
.catch(this.logAndPassOn);
}
Run Code Online (Sandbox Code Playgroud) 在我们的应用程序中,我们需要实现以下场景
我们的应用程序是基于ajax的应用程序,因此我们发送ajax请求(如使用jquery.ajax()函数)非常简单方便.
但是在googilng之后,事实证明只有在使用非ajax POST请求时才能进行文件下载(就像在这个流行的SO线程中所描述的那样).因此,我们需要实现更加丑陋且更复杂的解决方案,这需要form使用嵌套的隐藏字段构建HTML结构.
有人可以用简单的话来解释为什么ajax请求不能用于下载文件?这背后的机制是什么?
我正在使用AngularJS和Spring编写应用程序.我想向服务器发送请求并下载从控制器返回的响应作为文件.在控制器中,我有csv文件的内容(作为字符串),即1;2;3;4(1行,4列).将此响应作为文件下载的最简单方法是什么?
下面,我发布了我的简化代码.在Spring控制器中:
@RequestMapping(value = "/csv", method = GET)
@ResponseBody
public String getCsvFile() {
return getCsvContent();
}
Run Code Online (Sandbox Code Playgroud)
在javascript(AngularJS)
return $http({method: 'GET', url: 'csv/'});
Run Code Online (Sandbox Code Playgroud)
我也试图写入响应流(下面),设置标题,但在客户端我总是把这个内容作为字符串 - 而不是作为要下载的文件.
@RequestMapping(value = "/csv", method = GET)
@ResponseBody
public void getCsvFile(HttpServletResponse response) {
response.setContentType("application/csv");
response.setHeader("Content-Disposition", "attachment; filename=file.csv");
response.setContentLength(getCsvContent().getBytes().length);
ServletOutputStream out = response.getOutputStream();
out.write(getCsvContent());
out.flush();
out.close();
}
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何正确编写控制器的方法,以便在客户端下载响应作为文件?
当用户按下ctrl + s按键但Chrome崩溃时,我正在尝试将我的HTML文件保存在Chrome中.
(我只想下载我的HTML文件的源代码)
我读到它发生是因为我的文件大于1.99M ..
在第一次尝试中(在我知道Chrome崩溃之前):
function download(filename, text) {
var pom = document.createElement('a');
pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
pom.setAttribute('download', filename);
pom.click();
}
download('test.html', "<html>" + document.getElementsByTagName('html')[0].innerHTML + "</html>");
Run Code Online (Sandbox Code Playgroud)
在我读到关于崩溃的第二次尝试之后,我使用了blob:
function dataURItoBlob(dataURI) {
var byteString = atob(dataURI.split(',')[1]);
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
var bb = new BlobBuilder();
bb.append(ab);
return bb.getBlob(mimeString);
}
function download(dataURI) …Run Code Online (Sandbox Code Playgroud) 我有一个后端API,它可以在我们调用时基本上下载模板.我在我的html页面上提供了一个href,因此每当有人点击该href时,它会调用后端API并且该文件应该被下载.
但该文件未下载.
我正在使用React.如果我只是从我的浏览器点击后端,文件会被下载,但如果我从反应中调用它,则不会.
任何线索?
REACT CODE:
const config = require('config');
var aws4 = require('aws4');
const Promise = require('axios');
const requestHelper = {
appendHeaders(request){
request.headers = request.headers || {};
if(request.headers["Content-Type"]){
return
}
request.headers["Content-Type"] = "application/json";
},
externalApi(request, serverResult){
if(!request.method){
request.method='POST';
}
request.path = request.url
this.appendHeaders(request)
console.log('request',request)
return Promise(request)
.then((apiResponse) => {
if (apiResponse.data.errors) {
var error = apiResponse.data.errors;
console.log('api error response: ', error);
serverResult.status(400).json({ error })
} else {
console.log('api response: ', apiResponse.data);
serverResult.status(200).json(apiResponse.data);
}
}).catch((error) => {
console.log('api error response: …Run Code Online (Sandbox Code Playgroud)以下代码在Chrome中完美运行
<script>
function myFunction() {
var blob = new Blob(['<a id="a"><b id="b">hey!</b></a>'], {type : 'text/html'});
var newurl = window.URL.createObjectURL(blob);
document.getElementById("myFrame").src = newurl;
}
</script>
Run Code Online (Sandbox Code Playgroud)
但它不适用于IE.有人可以告诉我这里有什么问题.
iframe"src"也设置为blob,如下所示.
<iframe id="myFrame" src="blob:0827B944-D600-410D-8356-96E71F316FE4"></iframe>
Run Code Online (Sandbox Code Playgroud)
注意:我也走了这window.navigator.msSaveOrOpenBlob(newBlob)条路,但到目前为止没有运气.
我的网站绘制了一个柱形图。我有一个按钮可以将其保存为 PDF 文件,然后在保存之前显示它。
现在的工作方式是这样的。
问题出在 PDF 文件的名称上。它类似于 5d78c1eb-0829-4e7e-8ffc-71cf1f102f56.pdf 并且 url 是 blob:http://example.com/5d78c1eb-0829-4e7e-8ffc-71cf1f102f56 当用户看到 PDF 并单击“保存”时,他会收到这个可怕的信息文件名。
window.open(doc.output('bloburl'), '_blank');
如果我将此行更改为以下内容,我可以设置所需的文件名:
doc.save('sample-file.pdf');
但在这种情况下,文件只是下载,但我需要先显示它。
有没有办法显示 PDF 并为其指定合适的名称?我试过这个:
window.open(doc.output('bloburl', {filename: 'myFileName.pdf'}), '_blank');
但这没有帮助。
我看到的另一种方法是不显示 jsPDF 中的 PDF,而是将图像发送到服务器并使用 TCPDF 在那里制作 PDF 文件。用 TCPDF 制作的文件可以有一个我给它的名称,但我认为将图像发送来回是愚蠢的。
那么问题是如何制作 PDF 并以我想要的名称将其显示给用户?
如何在打字稿中设置blob的文件名?对于IE,我可以轻松设置文件名,但对于Chrome,它看起来不可能.基本上我需要类似于这个解决方案但有打字稿的东西
downloadFile(data: any) {
var blob = new Blob([data], {type: 'text/csv'});
let fileName = 'my-test.csv';
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
//save file for IE
window.navigator.msSaveOrOpenBlob(blob, fileName);
} else {
//save for other browsers: Chrome, Firefox
var objectUrl = URL.createObjectURL(blob);
window.open(objectUrl);
}
}
Run Code Online (Sandbox Code Playgroud)
从html UI/angular 2调用此函数:
<button type="button" class="btn btn-success"
(click)="downloadFile('test')">Download <br /> Download </button>
Run Code Online (Sandbox Code Playgroud) 我们生产基于浏览器的通信软件,公司用于咨询.在咨询结束时,顾问可以下载视频流的录像.由于Chrome已更新至65版,因此多文件下载仅提供最后一个文件.
我们显示已保存会话的列表,当用户点击"下载"时,我们循环浏览该会话的所有记录,并像在此SO解决方案中一样下载它们: JavaScript blob文件名没有链接
var saveBlobAs = function(blob, filename){
var url = window.URL.createObjectURL(blob);
var a = document.createElement('a');
document.body.appendChild(a);
a.style = 'display: none';
a.href = url;
a.download = filename;
a.click();
window.URL.revokeObjectURL(url);
};
for(var i = 0; i < matchedRecordings.length; i++){
var recording = matchedRecordings[i];
saveBlobAs(recording.blob, fileName);
}
Run Code Online (Sandbox Code Playgroud)
代码仍然可以在FireFox上完美运行,但Chrome 65只提供最后一个文件.我可以通过将链接创建更改为来修复它
var a = document.createElement('a');
document.body.appendChild(a);
a.style = 'display: none';
a.href = url;
a.target = '_BLANK'; // Added this
a.download = filename;
a.click();
window.URL.revokeObjectURL(url);
Run Code Online (Sandbox Code Playgroud)
但现在Chrome将其视为弹出窗口并为每个文件打开新标签.
还有其他人有同样的问题吗?有没有比在新标签中打开每个链接更好的解决方案?