此帖子可能是重复的,但我在堆栈上没有找到类似的帖子,所以我在这里发布。我想将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。
您可以使用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实例