将c#文件的byte []转换为要下载的blob

时间:2019-07-12 15:56:47

标签: arrays typescript download blob zipfile

我有一个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的示例,但找不到如何将其转换为一个的例子。

0 个答案:

没有答案