[英]Create zip in .net Core from URLS without downloading on server
我有我正在嘗試使用 Memorystream 創建 zip 的 Internet URL 列表。 文件位於 s3 存儲桶中,但是 s3 sdk 沒有任何功能將文件夾下載為 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 /壓縮/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, ZipArchiveMode.Create ) ) {
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
}
這就是 xml Doc 可以壓縮並上傳到 aws S3 的方式,希望會對某人有所幫助。
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.