Wie kann ein Controller mithilfe der ASP.NET-Web-API eine Sammlung gestreamter Bilder zurückgeben, die mit der DotNetZip-Bibliothek komprimiert wurden?

Wie erstelle ich einen Web-API-Controller, der eine komprimierte Zip-Datei generiert und zurückgibt, die aus einer Sammlung von speicherinternen JPEG-Dateien (MemoryStream-Objekten) gestreamt wird? Ich versuche, DotNetZip Library zu verwenden. Ich habe folgendes Beispiel gefunden:http://www.4guysfromrolla.com/articles/092910-1.aspx#postadlink. Der Response.OutputStream ist jedoch in der Web-API nicht verfügbar, sodass diese Technik nicht richtig funktioniert. Aus diesem Grund habe ich versucht, die Zip-Datei in einem neuen MemoryStream zu speichern. aber es warf. Zuletzt habe ich versucht, PushStreamContent zu verwenden. Hier ist mein Code:

    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) gibt eine Nullreferenz aus. Aber weder zipFile noch memStream sind null und es gibt keine interne Ausnahme. Ich bin mir also nicht sicher, was die Nullreferenz verursacht. Ich habe sehr wenig Erfahrung mit Web-API, Speicher-Streams und ich habe DotNetZipLibrary noch nie zuvor verwendet. Dies ist eine Antwort auf diese Frage:Sie möchten einen effizienten ASP.NET-Web-API-Controller, der 30 bis 50 ~ 3 MB JPEGs zuverlässig zurückgeben kann

Irgendwelche Ideen? Vielen Dank!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage