将多个MemoryStream作为HttpResponseMessage返回

问题描述 投票:0回答:1

此帖子可能是重复的,但我在堆栈上没有找到类似的帖子,所以我在这里发布。我想将MemoryStream的列表返回为HttpResponseMessage。我的文件夹中有多个文件,我只想从Web api返回这些文件作为HttpResponseMessage

public async Task<HttpResponseMessage> GetDicomImage(string FolderName)
 {
 try
            {


                    var content = new MultipartContent();
                    MemoryStream dataStream = null;
                    filePathInfo = Directory.GetFiles(FolderName);
                    foreach (var dcm in filePathInfo)
                    {
                        var dataBytes = File.ReadAllBytes(dcm);
                        dataStream = new MemoryStream(dataBytes);
                        content.Add(dataStream);
                    }
                    httpResponseMessage = Request.CreateResponse(HttpStatusCode.OK);
                    httpResponseMessage.Content = content;//new StreamContent(dataStream);
                    httpResponseMessage.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
                    //httpResponseMessage.Content.Headers.ContentDisposition.FileName = bookName;
                    httpResponseMessage.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/dicom");         
            }
            catch (Exception ex)
            {
                return new HttpResponseMessage
                {
                    StatusCode = HttpStatusCode.InternalServerError,
                    Content = new StringContent(ex.Message)
                };
            }
 }

这是我的代码,我不了解它的问题所在。我没有为不同的文件使用多个MemoryStream。

c# asp.net-web-api memorystream
1个回答
0
投票

您可以使用JsonConvert.SerializeObject包中的Newtonsoft.Json处理它,如下所示:

{
    public async Task<HttpResponseMessage> GetDicomImage(string FolderName)
    {
        var content = new MultipartContent();
        var filePathInfo = Directory.GetFiles(FolderName);
        var files = new List<FileData>();
        foreach (var dcm in filePathInfo)
        {
            var fileData = new FileData { Content = File.ReadAllBytes(dcm), Name = Path.GetFileName(dcm) };
            files.Add(fileData);
        }
        content.files = files.ToArray();

        httpResponseMessage = Request.CreateResponse(HttpStatusCode.OK);
        httpResponseMessage.Content = JsonConvert.SerializeObject(content);

    }
}

public class MultipartContent
{
    public FileData[] files;
}

public class FileData
{
    public byte[] Content;
    public string Name;
}

但是不需要返回流。返回byte[]和文件名就足够了(以便以后可以保存文件)

然后,您将需要读取客户端上的响应内容,并将其反序列化回MultipartContent实例

© www.soinside.com 2019 - 2024. All rights reserved.