想要下载一个以FileStreamResult返回的zip文件

时间:2019-10-17 23:18:38

标签: javascript reactjs asp.net-web-api

我有一个返回FileStreamResult的Web Api,我想下载zip格式的文件,如果Web Api返回原始字节数组,我可以下载,但是由于某种原因,线索只希望从FileStreamResult中获取它,有人可以帮帮我,如何使用FileStreamResult写入文件-谢谢。我将代码放在这里,Web Api方法作为FileStreamResult返回,但是我正在放置的javascript函数和react事件的客户端代码正在运行,但使用字节数组,因此有人可以建议我可以进行哪些修改客户端脚本开始工作并下载zip文件。我需要一些帮助-谢谢。 以下是我的Web Api代码:

Django

这是我的React事件供下载

[EnableCors("AnotherPolicy")]
[HttpPost]
public FileStreamResult Post([FromForm] string communityName, [FromForm] string files) //byte[]
{
    var removedInvalidCharsFromFileName = removeInvalidCharsFromFileName(files);
    var tFiles = removedInvalidCharsFromFileName.Split(',');
    string rootPath = Configuration.GetValue<string>("ROOT_PATH");
    string communityPath = rootPath + "\\" + communityName;

byte[] theZipFile = null;
FileStreamResult result = null;


using (MemoryStream zipStream = new MemoryStream())
{
    using (ZipArchive zip = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
    {
        foreach (string attachment in tFiles)
        {
            var zipEntry = zip.CreateEntry(attachment);

            using (FileStream fileStream = new FileStream(communityPath + "\\" + attachment, FileMode.Open))
            using (Stream entryStream = zipEntry.Open())
            {
                fileStream.CopyTo(entryStream);
            }
        }
    }

    theZipFile = zipStream.ToArray();
    result = new FileStreamResult(zipStream, "application/zip") { FileDownloadName = $"{communityName}.zip" };
}

//return theZipFile;
return result;
}

以下是我在CommonFuncs.js文件中编写的常用功能:

handleDownload = (e) => {
e.preventDefault();

var formData = new FormData();
formData.append('communityname', this.state.selectedCommunity);
formData.append('files', JSON.stringify(this.state['checkedFiles']));

//let env='local';        
let url = clientConfiguration['filesApi.local'];
//let tempFiles = clientConfiguration[`tempFiles.${env}`];
//alert(tempFiles);

axios({
    method: 'post',
    responseType: 'application/blob',
    contentType: 'application/blob',
    url: url,
    data: formData
})
    .then(res => {
        console.log(res);
        console.log(res.data);
        let fileName = `${this.state['selectedCommunity']}`
        const arrayBuffer = base64ToArrayBuffer(res.data);
        createAndDownloadBlobFile(arrayBuffer, fileName, 'zip');
    })
    .catch(error => {
        console.log(error.message);
    });
};

任何帮助都将非常有帮助-预先感谢

0 个答案:

没有答案