我有一个C#API控制器操作,将byte []返回到角度服务。 byte []是压缩文件的结果。
byte []似乎很好,因为当我通过MVC控制器而不是ActionResult(aka FileActionResult)结果返回它时,像这样:
// SIMPLIFIED WORKING MVC METHOD
public virtual ActionResult getFile(){
var byteArray = packageFile();
return File(byteArray, MediaTypeNames.Application.Zip, fileName);
}
在这种情况下,zip文档成功返回并下载。
在这种新情况下,我只是将byte []通过API控制器返回给了角度应用程序。我读取了与byte []等效的Typescript类型为Int8Array [],因此将其放入Int8Array []类型的Typescript变量中。
这是我简化的API控制器方法:
// API CONTROLLER METHOD
public byte[] getFileBytes(){
var fileBytes = packageFile();
return fileBytes;
}
然后是简化的打字稿Angular代码:
// TYPESCRIPT CODE
const byteArray = this.service.getFileBytes(); // const of type Int8Array[]
// tried blob
const blob = new Blob(byteArray, { type: 'application/zip' });
// tried file instead of blob too
const file = new File(byteArray, fileName, { type: 'application/zip' });
if(window.navigator && navigator.nsSaveOrOpenBlob){
navigator.msSaveOrOpenBlob(blob, fileName); // blob or file
} else {
const link = document.createElement('a');
const url = URL.createObjectURL(blob);
link.href = url;
link.download = fileName;
document.appendChild(link);
link.Click();
}
这将返回错误:无法构造“ Blob”。提供的值不能转换为序列。
我在想我需要将我的byte []转换为其他内容,但是不确定是什么方式。我看过一些使用Uint8Array的示例,但找不到如何将其转换为一个的例子。