【发布时间】:2013-12-16 17:25:47
【问题描述】:
我正在尝试从我的 web api 生成一个 CSV 文件并通过 angularjs 接收该文件。我有一个如下的 API 控制器:
[HttpPost]
public HttpResponseMessage GenerateCSV(FieldParameters fieldParams)
{
var output = new byte[] { };
if (fieldParams!= null)
{
using (var stream = new MemoryStream())
{
this.Serialize(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 = "Fields.csv"
};
return result;
}
在我的 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) {
console.log(content);
// only creates a csv file with "[object Object]" written in it
var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:text/csv;charset=utf-8,\uFEFF' + encodeURI(content.Parameters);
hiddenElement.target = '_blank';
hiddenElement.download = 'myFile.csv';
hiddenElement.click();
});
};
比如说,在我的 API 控制器中,响应的内容是
输出
{字节[152]}
[0]: 83
[1]: 101
[2]: 44
[3]:67
[4]:10
当我在 angularjs 中收到此信息并将content 的值放入控制台日志(chrome)中时,我得到了:
{Parameters: Array[1], $promise: Object, $resolved: true, $get: function, $save: function…}
0:"S"
1: "e"
2: ","
3:“C”
4:“↵”
$promise: 对象
$resolved: true`
为什么angularjs中收到的
content中包含字符 已经代替了一个字节的数组?我怎样才能控制
content,这样我只会使用 csv 相关数据并删除$promise和$resolved?为什么他们首先被包括在内?如何删除它们?如果我正在做的是生成 csv 的正确方法是什么 错误的? :|
【问题讨论】:
标签: javascript angularjs csv asp.net-web-api httpresponse