2016-06-28 31 views
2

我的情況:我有一堆字節數組形式的Jpeg圖像。我有這些對象的列表:如何將一個字節數組Image添加到一個ziparchive中?

public class MyImage 
{ 
    public byte[] ImageData { get; set; } 
} 

我期望的情況:我想在內存中創建一個zip文件並把它放在一個變量。我正在REST服務中創建這些zip文件。理想情況下,我會將這個ziparchive轉換成一個字節數組,以便我可以將它發送到用其他語言編寫的系統。

我有創建一個ziparchive,並添加我的圖像字節數組的代碼。但是,我如何將ziparchive本身變成一個字節數組?

var images = new List<MyImage>(); 

//add data to images 

using (var ms = new MemoryStream()) 
{ 
    using (var zipArchive = new ZipArchive(ms, ZipArchiveMode.Create, true)) 
    { 
     var i = 1; 
     foreach (var image in images) 
     { 
      var entry = zipArchive.CreateEntry("image" + i + ".jpg", CompressionLevel.Fastest); 
      using (var entryStream = entry.Open()) 
      { 
       entryStream.Write(image.ImageData, 0, photo.ImageOriginal.Length); 
      } 
      i++; 
     } 

     //var zipBytes = magic method for turning my archive into a zipfile 
    } 
} 

我的問題:我如何得到這個工作? 獎金問題:是一個ziparchive變成與其他語言兼容的字節數組?

+0

'ZipArchive'從哪裏來?爲什麼不使用內置的'ZipPackage'類? – lokusking

+0

@lokusking:ZipArchive來自System.IO.Compression。這幾乎是內置的。 :) –

回答

3

您的ZipArchive映射到MemoryStream(變量ms)。您可以使用MemoryStream.ToArray()作爲字節數組獲取MemoryStream的內容。

+0

謝謝,爲我工作。你有沒有機會知道,當轉換爲字節數組的ziparchive類是否可以通過其他語言轉換回zip文件? – ohyeah

+0

是的,ZipArchive創建完全有效的.zip文件。如果你把單個字節粘在一起,你仍然會擁有一個完全有效的.zip文件,無論你使用哪種語言。我懷疑你真正的問題是「什麼是使用Web API傳輸一組字節的最佳方式」,但這絕對是一個值得它自己的問題的話題(已經有很多關於StackOverflow的信息)。 –

+1

關閉,但我正在使用ServiceStack。謝謝您的幫助! – ohyeah

相關問題