Используя ASP.NET Web API, как контроллер может возвращать коллекцию потоковых изображений, сжатых с помощью библиотеки DotNetZip?

Как я могу создать контроллер Web API, который генерирует и возвращает сжатый zip-файл, потоковый из коллекции файлов JPEG в памяти (объекты MemoryStream). Я'Я пытаюсь использовать библиотеку DotNetZip. Я нашел этот пример:http://www.4guysfromrolla.com/articles/092910-1.aspx#postadlink, Но Response.OutputStream недоступен в веб-API, поэтому метод нет совсем работа. Поэтому я попытался сохранить zip-файл в новом MemoryStream; но это бросило. Наконец, я попытался использовать PushStreamContent. Вот'мой код:

    public HttpResponseMessage Get(string imageIDsList) {
        var imageIDs = imageIDsList.Split(',').Select(_ => int.Parse(_));
        var any = _dataContext.DeepZoomImages.Select(_ => _.ImageID).Where(_ => imageIDs.Contains(_)).Any();
        if (!any) {
            throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
        }
        var dzImages = _dataContext.DeepZoomImages.Where(_ => imageIDs.Contains(_.ImageID));
        using (var zipFile = new ZipFile()) {
            foreach (var dzImage in dzImages) {
                var bitmap = GetFullSizeBitmap(dzImage);
                var memoryStream = new MemoryStream();
                bitmap.Save(memoryStream, ImageFormat.Jpeg);
                var fileName = string.Format("{0}.jpg", dzImage.ImageName);
                zipFile.AddEntry(fileName, memoryStream);
            }
            var response = new HttpResponseMessage(HttpStatusCode.OK);
            var memStream = new MemoryStream();
            zipFile.Save(memStream); //Null Reference Exception
            response.Content = new ByteArrayContent(memStream.ToArray());
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/zip");
            response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = string.Format("{0}_images.zip", dzImages.Count()) };
            return response;
        }
    }

zipFile.Save (memStream) выбрасывает нулевую ссылку. Но ни zipFile, ни memStream не имеют значения null, и нет внутреннего исключения. Так что я'я не уверен чтовызывает нулевую ссылку. Я'У меня очень мало опыта работы с веб-API, потоками памяти иникогда раньше не использовал DotNetZipLibrary. Это продолжение этого вопроса:Требуется эффективный контроллер ASP.NET Web API, который может надежно возвращать от 30 до 50 ~ 3 МБ JPEG

Есть идеи? Спасибо!

Ответы на вопрос(4)

Ваш ответ на вопрос