我正在使用MVC和C#开发Web API,我尝试返回存储在数据库中的文件夹和路径中的图像列表,我试着这样做:
public class Image {
public int Id { get; set; }
public string Path { get; set; }
public int Item_Id { get; set; }
public bool isMain { get; set; }
}
在图像控制器中我调用这个方法:
[HttpGet]
[ActionName("GetImageByItemId")]
public HttpResponseMessage GetImages(int id)
{
try
{
using (var ctx = new ApplicationDbContext())
{
var entity = ctx.Images.Where(e => e.Item_Id == id).ToList();
// ctx.Images.FirstOrDefault(e => e.Item_Id == id);
if (entity != null)
{
List<HttpResponseMessage> shapes = new List<HttpResponseMessage>();
HttpResponseMessage response = new HttpResponseMessage();
for (int i = 0; i < entity.Count; i++)
{
String filePath = HostingEnvironment.MapPath("~/Images/" + entity[i].Path + ".jpg");
FileStream fileStream = new FileStream(filePath, FileMode.Open);
response.Content = new StreamContent(fileStream); // this file stream will be closed by lower layers of web api for you once the response is completed.
response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
shapes.Add(response);
}
// return response;
// return Request.CreateResponse(HttpStatusCode.OK, shapes);
return ControllerContext.Request
.CreateResponse(HttpStatusCode.OK, new {shapes});
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "The Images With ID" + id.ToString() + " Not Found");
}
}
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
}
}
如果我使用
return response;
或
return shapes[1];
它的工作是返回一个图像,但我需要它返回一个图像列表,该怎么做?
答案 0 :(得分:0)
一个HTTP响应可以包含零个或一个(1)内容。不再。
如果要提供多个文件,则需要根据需要发出尽可能多的请求。
首先,制作一个MVC动作,它将返回给定实体id可用文件的列表。
然后,制作一个MVC动作,将实体id 和作为参数。
在客户端,首先调用第一种方法。然后,与要下载的文件一样多次调用第二个。
您还可以使用System.IO.Packaging或known library将多个文件打包到一个文件(zip,tar,7zip ...)。
您也可以尝试在服务器端和客户端实施MIME规范。警告:当前的Web浏览器不实现它。这显然是非标准因此不推荐。 This article似乎解决了这项技术。