首页 > 解决方案 > 将标题中的希伯来文文件名作为内容配置发送到 AngularJS 客户端

问题描述

我需要将文件名(希伯来语)发送到 AngularJS 中的客户端。在我的 web api 方法中,我使用以下代码发送内容处置标头:

Response.Clear();
Response.Buffer = true;
Response.Charset = "UTF-8";
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

//simplified - actually sending a variable with filename
Response.AddHeader("Content-Disposition", "attachment;filename=דיזינגוף.xlsx");

using (MemoryStream MyMemoryStream = new MemoryStream())
{
  wb.SaveAs(MyMemoryStream);
  MyMemoryStream.WriteTo(Response.OutputStream);
  Response.Flush();
  Response.End();
}

但是当我在浏览器(Chrome)中查看控制台时,我看到了 在此处输入图像描述

如何在我的客户端应用程序中发送/读取 UTF-8 文件名?

标签: c#angularjsasp.net-web-api

解决方案


希望它会帮助其他人:

我们需要对包含 utf 字符的文件名进行编码。您可以在添加响应标头之前执行此操作:

//filename - 2100871-2_החל_25042019.xlsx
var file = HttpUtility.UrlEncode(filename, Encoding.UTF8);
Response.AddHeader("Content-Disposition", "attachment;filename=" + file + ".xlsx");

然后在客户端,我们需要使用解码它

  var filename;

  var disposition = headers['content-disposition'];

  if (disposition && disposition.indexOf('attachment') !== -1) {
      var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
      var matches = filenameRegex.exec(disposition);

      if (matches != null && matches[1]) {
          filename = matches[1];
      }
 }
 filename = decodeURIComponent(filename); //decode here

推荐阅读