从Web API返回图像列表

时间:2017-04-15 18:29:38

标签: c# entity-framework asp.net-web-api

我正在使用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];

它的工作是返回一个图像,但我需要它返回一个图像列表,该怎么做?

1 个答案:

答案 0 :(得分:0)

一个HTTP响应可以包含零个或一个(1)内容。不再。

逻辑解决方案

如果要提供多个文件,则需要根据需要发出尽可能多的请求。

首先,制作一个MVC动作,它将返回给定实体id可用文件的列表。

然后,制作一个MVC动作,将实体id 作为参数。

在客户端,首先调用第一种方法。然后,与要下载的文件一样多次调用第二个。

包解决方案

您还可以使用System.IO.Packagingknown library将多个文件打包到一个文件(zip,tar,7zip ...)。

外来解决方案

您也可以尝试在服务器端和客户端实施MIME规范。警告:当前的Web浏览器不实现它。这显然是非标准因此不推荐This article似乎解决了这项技术。