我有一个使用C#编写的后端,可以在内存中生成一个zip文件(使用System.IO.Compression),并将其发送到前端。如果在发送之前下载zip文件,则可以正常工作并且是ANSI编码(在notepad++中找到)。
目前我返回文件的方式如下,我尝试了许多不同的方法来实现,例如仅返回无头文件,但现在它看起来像这样:
无论我如何使用Javascript(前端)下载文件,似乎都是以utf8编码保存的(再次使用notepad++发现)。我试过使用js-file-download(https://www.npmjs.com/package/js-file-download)或创建blobs,但所有我下载的东西最终都是以utf8编码。
我应该如何在Javascript中下载此文件而不会破坏存档?
以下是我目前在Javascript中的尝试,使用我在这里找到的一段代码(JavaScript blob filename without link)来下载文件:
注意:实际zip文件大小为3,747KB,而从JavaScript下载的zip文件始终要大得多,在这种情况下:6,917KB。
目前我返回文件的方式如下,我尝试了许多不同的方法来实现,例如仅返回无头文件,但现在它看起来像这样:
[HttpPost]
[Route("GetUserWorkContext")]
public async Task<IActionResult> GetUserWorkContext([FromBody] GetUserWorkContextRequest request, [FromServices] IExportManager exportManager)
{
var zipStream = await exportManager.GetUserWorkContext(userId, request.IncludeArchived);
HttpContext.Response.Headers.Add("Content-Disposition", "attachment; filename = test.zip; charset=Windows-1252");
HttpContext.Response.Headers.Add("Content-Length", zipStream.ToArray().Length.ToString());
return File(zipStream.ToArray(), "application/octet-stream");
}
无论我如何使用Javascript(前端)下载文件,似乎都是以utf8编码保存的(再次使用notepad++发现)。我试过使用js-file-download(https://www.npmjs.com/package/js-file-download)或创建blobs,但所有我下载的东西最终都是以utf8编码。
我应该如何在Javascript中下载此文件而不会破坏存档?
以下是我目前在Javascript中的尝试,使用我在这里找到的一段代码(JavaScript blob filename without link)来下载文件:
function getUserWorkContext({ includeArchived }) {
return new Promise(function () {
Axios.post('/api/Export/GetUserWorkContext', {includeArchived})
.then((response) => {
if(response.data){
var blobObject = new Blob([response.data], {type: 'application/zip;charset=Windows-1252'});
downloadFile(blobObject, "test.zip");
}
})
}
function downloadFile(file, fileName) {
if (navigator.msSaveBlob) { // For ie and Edge
return navigator.msSaveBlob(file, fileName);
}
else {
let link = document.createElement('a');
link.href = window.URL.createObjectURL(file);
link.download = fileName;
document.body.appendChild(link);
link.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window }));
link.remove();
window.URL.revokeObjectURL(link.href);
}
}
注意:实际zip文件大小为3,747KB,而从JavaScript下载的zip文件始终要大得多,在这种情况下:6,917KB。