下载时在文件名中替换字符

时间:2017-12-05 15:16:10

标签: c# angularjs asp.net-web-api

使用angularJS作为UI工作webapi应用程序。 当我从我的应用程序下载文件到我的桌面时。更改名称替换某些字符,如'é','ü'与这些字符©。 用于下载文件的代码如下。

    [HttpGet, Route("{documentid}/raw", Order = 5)]
    public IHttpActionResult GetDocumentRaw(string documentid)
    {
      var service = ResolveService<IDocumentService>();
      var raw = service.GetRaw(documentid);

      if (raw.Data == null)
      {
        return NotFound();
      }

      var fileName = raw.FileName?.GetCleanFileName();
      var contentType = raw.ContentType;
      if (String.IsNullOrWhiteSpace(fileName))
      {
        fileName = "rawdata";
      }
      if (String.IsNullOrWhiteSpace(contentType))
      {
        contentType = "application/octet-stream";
      }

      var response = Request.CreateResponse(HttpStatusCode.OK);
      Stream stream = new MemoryStream(raw.Data);
      response.Content = new StreamContent(stream);
      response.Content.Headers.Remove("content-type");
      response.Content.Headers.Add("content-type", contentType);
      response.Content.Headers.Add("content-disposition", "inline; filename=\"" + fileName + "\"");
      response.Content.Headers.Add("content-length", stream.Length.ToString());
      response.Content.Headers.Remove("x-filename");
      response.Content.Headers.Add("x-filename", fileName);

      return ResponseMessage(response);
    }

在UI端,此功能用于下载文件。

$download: function(propertyTypeKey) {
            $http
              .get(this.url + '/raw', {
                responseType: 'arraybuffer',
                params: {
                  propertyTypeKey: propertyTypeKey
                }
              })
              .then(function (response) {
                DownloadService.downloadFile(
                  response.data,
                  response.headers('content-type'),
                  response.headers('x-filename')
                );
              });
          },

这与textformat编码有关吗?我应该在Http响应中添加一些配置吗?或者它可能与IIS服务器的配置有关? 我首先怀疑我的chrome导航器,但我在IE上遇到了同样的问题。

谢谢。

0 个答案:

没有答案