2016-06-28 9 views
2

私の状況:私はバイト配列の形式でJPEG画像の束を持っています。私は、これらのオブジェクトのリストを持っている:バイト配列イメージをzipアーカイブに追加するにはどうすればよいですか?

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

私の希望状況:私はメモリにzipファイルを作成し、変数に入れたいです。これらのzipファイルをRESTサービスで作成しています。理想的には、この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

関連する問題