相关疑难解决方法(0)

如何将JavaScript数组信息导出到csv(在客户端)?

我知道有很多这方面的问题,但我需要使用JavaScript来做到这一点.我正在使用Dojo 1.8并拥有数组中的所有属性信息,如下所示:

[["name1", "city_name1", ...]["name2", "city_name2", ...]]
Run Code Online (Sandbox Code Playgroud)

知道如何将其导出到CSV客户端吗?

javascript csv export client-side dojo-1.8

460
推荐指数
19
解决办法
50万
查看次数

如何使用Angular2下载文件

我有一个WebApi/MVC应用程序,我正在开发一个angular2客户端(以取代MVC).我在理解Angular如何保存文件时遇到了一些麻烦.

该请求是确定的(正常工作与MVC,我们可以登录接收到的数据),但我无法弄清楚如何保存下载的数据(我主要是遵循同样的逻辑这篇文章).我确信这是非常简单的,但到目前为止,我根本不理解它.

组件功能的代码如下.我尝试过不同的方案,则斑的方法应该是,据我了解的路要走,但没有作用createObjectURLURL.我甚至找不到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)

download fileapi typescript angular

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

为什么没有办法使用ajax请求下载文件?

在我们的应用程序中,我们需要实现以下场景

  1. 请求从客户端发送
  2. 服务器处理请求并生成文件
  3. 服务器返回文件作为响应
  4. 客户端浏览器显示文件下载弹出对话框,允许用户下载文件

我们的应用程序是基于ajax的应用程序,因此我们发送ajax请求(如使用jquery.ajax()函数)非常简单方便.

但是在googilng之后,事实证明只有在使用非ajax POST请求时才能进行文件下载(就像在这个流行的SO线程中所描述的那样).因此,我们需要实现更加丑陋且更复杂的解决方案,这需要form使用嵌套的隐藏字段构建HTML结构.

有人可以用简单的话来解释为什么ajax请求不能用于下载文件?这背后的机制是什么?

javascript ajax post download

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

Spring - 将响应下载为文件

我正在使用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)

有没有人知道如何正确编写控制器的方法,以便在客户端下载响应作为文件?

spring angularjs

33
推荐指数
2
解决办法
13万
查看次数

无法在'Window'上执行'atob'

当用户按下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)

html javascript jquery

28
推荐指数
4
解决办法
7万
查看次数

如何使用react保存从服务器下载的文件?

我有一个后端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)

reactjs

16
推荐指数
2
解决办法
6万
查看次数

将Blob设置为iframe的"src"

以下代码在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)条路,但到目前为止没有运气.

javascript iframe internet-explorer blob

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

有没有办法在jspdf输出时设置文件名()

我的网站绘制了一个柱形图。我有一个按钮可以将其保存为 PDF 文件,然后在保存之前显示它。

现在的工作方式是这样的。

  1. google.visualization 绘制图表。
  2. html2canvas 截取图表的屏幕截图。
  3. jsPDF 将屏幕截图插入 PDF 文件并将其显示给用户。

问题出在 PDF 文件的名称上。它类似于 5d78c1eb-0829-4e7e-8ffc-71cf1f102f56.pdf 并且 url 是 blob:http://example.com/5d78c1eb-0829-4e7e-8ffc-71cf1f102f56 当用户看到 PDF 并单击“保存”时,他会收到这个可怕的信息文件名。

在此输入图像描述 现在我这样显示 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 并以我想要的名称将其显示给用户?

pdf filenames tcpdf jspdf output

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

Typescript blob文件名没有链接

如何在打字稿中设置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)

google-chrome blob typescript angular

7
推荐指数
1
解决办法
7583
查看次数

自动多次下载不再适用于Chrome

我们生产基于浏览器的通信软件,公司用于咨询.在咨询结束时,顾问可以下载视频流的录像.由于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将其视为弹出窗口并为每个文件打开新标签.

还有其他人有同样的问题吗?有没有比在新标签中打开每个链接更好的解决方案?

google-chrome click download

7
推荐指数
1
解决办法
944
查看次数