我有互联网URL列表我试图使用Memorystream创建一个zip.文件在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]);
Run Code Online (Sandbox Code Playgroud)
但是.NET中的ZipArchive类采用本地文件路径而不是内存流
注意:我不能使用SharpZipLib,因为.NET Core不支持它.
Dai*_*Dai 16
但是.NET中的ZipArchive类采用本地文件路径而不是内存流
这是不真实的,ZipArchive该类具有接受Stream实例的重载:
https://msdn.microsoft.com/en-us/library/hh158268(v=vs.110).aspx
从指定的流初始化ZipArchive类的新实例.
Run Code Online (Sandbox Code Playgroud)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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7412 次 |
| 最近记录: |