Nic*_*ros 0 javascript zip zipfile angularjs asp.net-web-api2
我有以下angularjs代码:
$scope.search = function() {
creatorService.search($scope.model).then(function(data) {
saveAs(new Blob([data], { type: "application/octet-stream'" }), 'testfile.zip');
});
};
Run Code Online (Sandbox Code Playgroud)
(也使用fileSaver.js)
然后在我的webapi2方面采用以下方法:
public HttpResponseMessage Post(Object parameters)
{
var streamContent = new PushStreamContent((outputStream, httpContext, transportContent) =>
{
try
{
using (var zip = new ZipFile())
{
zip.AddEntry("test.txt", "test data");
zip.Save(outputStream);
}
}
finally
{
outputStream.Close();
}
});
streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/zip");
streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "test.zip"
};
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = streamContent
};
return response;
}
Run Code Online (Sandbox Code Playgroud)
我从这篇文章中得到了很多这个,它使用了ZipFile.
一切似乎都很完美,除了当我下载zip文件时,我无法打开它 - 它无效.它具有合适的大小,并且似乎具有正确的内容,但我无法打开它.
我可以验证angularjs代码是否Post()正确命中,正在传递参数(如果我有它们)并且Post()正在执行并返回而没有错误.然后fileSaver的东西正确处理返回内容,我可以保存生成的zip文件.
我不是以正确的方式做这件事,还是我做错了什么?
我正在重新发表评论(因为这是解决方案):
如果您直接致电(不使用任何javascript代码)您的服务,您是否获得有效的zip文件?我怀疑ajax调用会破坏你的文件.你的js代码中的数据类型是什么?
如果这是一个字符串,您的浏览器可能正在应用utf8转换(破坏您的文件).在这种情况下,您可以在执行ajax请求时请求ArrayBufferxhr.responseType = "arraybuffer";
| 归档时间: |
|
| 查看次数: |
5171 次 |
| 最近记录: |