Отправить имя файла на иврите в заголовке как расположение содержимого клиенту AngularJS - PullRequest
1 голос
/ 11 июля 2019

Мне нужно отправить имя файла (на иврите) клиенту в AngularJS. В моем методе веб-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), я вижу enter image description here

Как я могу отправить / прочитать имя файла UTF-8 в моем клиентском приложении?

1 Ответ

0 голосов
/ 12 июля 2019

Надеюсь, это поможет другим:

Нам нужно закодировать имя файла, содержащее символы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...