以zip格式下载多文件

时间:2019-04-02 09:11:29

标签: c# amazon-s3

我想批量下载具有不同密钥的多个文件(.zip),例如,我具有密钥file1(abc.txt),file2(xyz.pdf)和file3(qwe.png),我想下载abc .txt和qwe.png使用它们各自的密钥,但都一起以zip格式保存。

我正在尝试使用MVC5控制器C#来实现。

这是一个文件。我要一次处理多个文件。

using (client = new AmazonS3Client(AWSCredentials, RegionEndPoint)) {
GetObjectRequest request = new GetObjectRequest {
    BucketName = existingBucketName,
    Key = newFileName
};
using (GetObjectResponse response =        client.GetObject(request)) {
    byte[] buffer = ReadFully(response.ResponseStream);
    Response.OutputStream.Write(buffer, 0, buffer.Length);
    Response.AddHeader("content-disposition", "attachment; filename=" + newFileName);
    }
}

.zip文件是首选输出

1 个答案:

答案 0 :(得分:0)

创建一个将文件列表转换为zip文件的方法很容易。

public byte[] GetZippedFileFromFileList(List<KeyValuePair<string, byte[]>> fileList)
{
    using (MemoryStream zipStream = new MemoryStream())
    {
        using (ZipArchive zip = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
        {
            foreach (var file in fileList)
            {
                var zipEntry = zip.CreateEntry(file.Key);
                using (var writer = new StreamWriter(zipEntry.Open()))
                {
                    new MemoryStream(file.Value).WriteTo(writer.BaseStream);
                }
            }
        }

        return zipStream.ToArray();
    }
}

在我的参数fileList中,字符串是文件名,字节[]是文件。 然后在您的控制器中执行以下操作:

public ActionResult returnZipFile()
{
    return this.File(this.GetZippedFileFromFileList(fileList), "application/zip", "myZippedFile.zip"));
}