gpt4 book ai didi

c# - 从 URLS 在 .net Core 中创建 zip,无需在服务器上下载

转载 作者:太空狗 更新时间:2023-10-29 18:13:05 26 4
gpt4 key购买 nike

我有 Internet 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]);

但是 .NET 中的 ZipArchive 类采用本地文件路径而不是内存流

注意:我无法使用 SharpZipLib,因为 .NET Core 不支持它。

最佳答案

However the ZipArchive class in .NET takes local files path and not memorystream

这是不正确的,ZipArchive 类具有接受 Stream 实例的重载:

https://msdn.microsoft.com/en-us/library/hh158268(v=vs.110).aspx

Initializes a new instance of the ZipArchive class from the specified stream.

public ZipArchive(Stream stream)

(文档适用于完整的 .NET Framework,但 .NET Core 实现具有相同的接口(interface):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, 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
}

关于c# - 从 URLS 在 .net Core 中创建 zip,无需在服务器上下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43281554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com