javascript - 在angular js中从web api下载csv文件

标签 javascript angularjs csv asp.net-web-api httpresponse

我的 API Controller 正在返回一个 csv 文件,如下所示:

    [HttpPost]
    public HttpResponseMessage GenerateCSV(FieldParameters fieldParams)
    {
        var output = new byte[] { };
        if (fieldParams!= null)
        {
            using (var stream = new MemoryStream())
            {
                this.SerializeSetting(fieldParams, stream);
                stream.Flush();
                output = stream.ToArray();
            }
        }
        var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(output) };
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
        {
            FileName = "File.csv"
        };
        return result;
    }

我将发送和接收 csv 文件的 angularjs 如下所示:

$scope.save = function () {
            var csvInput= extractDetails();

            // File is an angular resource. We call its save method here which
            // accesses the api above which should return the content of csv
            File.save(csvInput, function (content) {
                var dataUrl = 'data:text/csv;utf-8,' + encodeURI(content);
                var hiddenElement = document.createElement('a');
                hiddenElement.setAttribute('href', dataUrl);
                hiddenElement.click();
            });
        };

在 chrome 中,它会下载一个名为 document 但没有文件扩展名的文件。 文件内容为[Object object]

在 IE10 中,不下载任何内容。

我该怎么做才能解决这个问题?

更新: 这可能对你们有同样问题的人有用:link

最佳答案

试一试:

File.save(csvInput, function (content) {
    var hiddenElement = document.createElement('a');

    hiddenElement.href = 'data:attachment/csv,' + encodeURI(content);
    hiddenElement.target = '_blank';
    hiddenElement.download = 'myFile.csv';
    hiddenElement.click();
});

基于this question中最优秀的答案

关于javascript - 在angular js中从web api下载csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39986313/

相关文章:

javascript - 如何使用 Javascript D3 将单列 CSV 文件导入到饼图中?

javascript - Ajax 响应未定义

javascript - HTML Canvas : draw image without anti-aliasing

angularjs - Angular 指令问题

javascript - 使用 Angular Scenario 测试 'any web page'

mysql - PHP 上传 CSV 并注入(inject)现有的 mySQL 表日期格式

r - 在 R csv 中计算岛屿

javascript - MongoDB updateOne 获取最旧的文档 我想要最新的

javascript - 根据 promise 值分配主干 URL

javascript - 尽管看似正确的调用,但不会显示 Angular Bootstrap 模式对话框