Memorystreamを使用してZipを作成しようとしているインターネットURLのリストがあります。ファイルはs3バケットにありますが、s3sdkにはフォルダをZipとしてダウンロードする機能がありません。
サーバーに保存して削除することは避けてください。プロジェクトはUbuntuで実行されています。私は次のように応答を得ようとしました、
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("MyClient", "1.0"));
var result = await httpClient.GetStreamAsync(names[0]);
ただし、.NETのZipArchiveクラスは、メモリストリームではなくローカルファイルパスを使用します
注:SharpZipLibは.NET Coreでサポートされていないため、使用できません。
ただし、.NETのZipArchiveクラスは、メモリストリームではなくローカルファイルパスを使用します
これは正しくありません。ZipArchive
クラスにはStream
インスタンスを受け入れるオーバーロードがあります。
https://msdn.Microsoft.com/en-us/library/hh158268(v = vs.110).aspx
指定されたストリームからZipArchiveクラスの新しいインスタンスを初期化します。
public ZipArchive(Stream stream)
(ドキュメントは完全な.NET Framework用ですが、.NET Coreの実装には同じインターフェイスがあります: https://github.com/dotnet/corefx/blob/master/src/System.IO.Compression/src /System/IO/Compression/ZipArchive.cs )
そのようです:
class ItemToAdd {
public String Name;
public Stream Content;
}
List<ItemToAdd> itemsToAdd = GetItemsFromAmazonS3();
using( MemoryStream zipStream = new MemoryStream() ) {
using( ZipArchive Zip = new ZipArchive( zipStream ) ) {
foreach( ItemToAdd item in itemsToAdd ) {
ZipArchiveEntry entry = Zip.CreateEntry( item.Name );
using( Stream entryStream = entry.Open() ) {
item.Content.CopyTo( entryStream );
}
}
}
zipStream.Position = 0;
// copy zipStream to output, or return it directly depending on your web framework
}
これは、xmlDocをzipしてawsS3にアップロードする方法です。誰かの助けになることを願っています。
var stMarged = new System.IO.MemoryStream();
Doc.Save(stMarged);
stMarged.Position = 0;
using (MemoryStream zipStream = new MemoryStream())
{
using (ZipArchive Zip = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
{
ZipArchiveEntry entry = Zip.CreateEntry("propertyFeed.xml");
using (Stream entryStream = entry.Open())
{
stMarged.CopyTo(entryStream);
}
//Not the best way but the file is smaler
//ZipArchiveEntry entry1 = Zip.CreateEntry("propertyFeed1.xml");
//using (StreamWriter writer = new StreamWriter(entry1.Open()))
// writer.Write(Doc2.OuterXml);
}
zipStream.Position = 0;
aa += UploadZipStreamToS3(zipStream);
}