【问题标题】:How to send a file from REST API to front-end?如何将文件从 REST API 发送到前端?
【发布时间】:2020-06-24 09:36:37
【问题描述】:

我正在尝试编写一个服务,该服务从字符串(有效)构建一个 .ics 日历文件并将其发送到前端。前端通过 api 查询获取该文件。这就是我这边的样子:

var dataBytes = Encoding.ASCII.GetBytes(icsString);
var dataStream = new MemoryStream(dataBytes);

HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StreamContent(dataStream) };
httpResponseMessage.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = "file.ics" };
httpResponseMessage.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");

return httpResponseMessage;

正确吗?如果应该可以,那么前端如何获取JS中的数据呢?

【问题讨论】:

    标签: javascript c# .net


    【解决方案1】:

    您的代码看起来不错,您需要关闭fileStream并将responseStream位置设置为0。您可以参考我的代码。请确保该文件存在于路径中并且您正在处理异常

          //Copy the source file stream to MemoryStream and close the file stream
          MemoryStream responseStream = new MemoryStream();
          Stream fileStream = System.IO.File.Open(downloadFilePath, FileMode.Open);
    
          fileStream.CopyTo(responseStream);
          fileStream.Close();
          responseStream.Position = 0;
    
          HttpResponseMessage response = new HttpResponseMessage();
          response.StatusCode = HttpStatusCode.OK;
    
          //Write the memory stream to HttpResponseMessage content
          response.Content = new StreamContent(responseStream);
          string contentDisposition = string.Concat("attachment; filename=", fileName);
          response.Content.Headers.ContentDisposition = 
                        ContentDispositionHeaderValue.Parse(contentDisposition);
          return response;
    

    【讨论】:

    • 实际上,我不使用 FileStream - 我想将字符串作为文件发送。所以我所做的是从字符串创建 ByteArray 并将其放入 MemoryStream。我将 MemoryStream 定位为 0,但没有帮助。最后的 HttpResponseMessage 有 324 的长度,这是否意味着它连接正确而前端部分只是读错了?
    猜你喜欢
    • 1970-01-01
    • 2018-08-14
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2016-04-21
    • 1970-01-01
    相关资源
    最近更新 更多