c# - 在亚马逊S3中创建zip文件夹

标签 c# amazon-s3 dotnetzip

我必须在亚马逊 S3 中创建一个文件夹。现在必须将该文件夹转换为 zip 文件。我已使用 DotNetZip Liberary 转换为 .zip 文件。这是该链接

http://dotnetzip.codeplex.com/wikipage?title=CS-Examples

public void ConvertToZip(string directoryToZip, string zipFileName)
{
    try
    {

        using (client = DisposableAmazonClient())
        {
            var sourDir = new S3DirectoryInfo(client, bucket, directoryToZip);

            var destDir = new S3DirectoryInfo(client, bucket, CCUrlHelper.BackupRootFolderPhysicalPath);

            using (var zip = new ZipFile())
            {
                zip.AddDirectory(sourDir.FullName); // recurses subdirectories
                zip.Save(Path.Combine(destDir.FullName, zipFileName));
            }
        }

        logger.Fatal("Successfully converted to Zip.");
    }
    catch (Exception ex)
    {
        logger.Error("Error while converting to zip. Error : " + ex.Message);
    }
}

当我运行代码时,它显示错误“不支持给定路径的格式。”

最佳答案

S3DirectoryInfo 模拟目录结构,但它不是实际的目录结构,并且 DotNetZip 不知道如何处理指向 S3 中对象的字符串。为此,您必须下载文件,将其压缩,然后上传生成的 zip 文件。下面是一些示例代码,展示了如何做到这一点。

class Program
{
    static void Main(string[] args)
    {
        var zipFilename = @"c:\temp\data.zip";
        var client = new AmazonS3Client();
        S3DirectoryInfo rootDir = new S3DirectoryInfo(client, "norm-ziptest");
        using (var zip = new ZipFile())
        {
            zip.Name = zipFilename;
            addFiles(zip, rootDir, "");
        }

    // Move local zip file to S3
    var fileInfo = rootDir.GetFile("data.zip");
    fileInfo.MoveFromLocal(zipFilename);
}

static void addFiles(ZipFile zip, S3DirectoryInfo dirInfo, string archiveDirectory)
{

    foreach (var childDirs in dirInfo.GetDirectories())
    {
        var entry = zip.AddDirectoryByName(childDirs.Name);
        addFiles(zip, childDirs, archiveDirectory + entry.FileName);
    }

    foreach (var file in dirInfo.GetFiles())
    {
        using (var stream = file.OpenRead())
        {                    
            zip.AddEntry(archiveDirectory + file.Name, stream);

            // Save after adding the file because to force the 
            // immediate read from the S3 Stream since 
            // we don't want to keep that stream open.
            zip.Save(); 
        }
    }
}

}

关于c# - 在亚马逊S3中创建zip文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15338070/

相关文章:

c# - 合格双倍显示不正常

java - Amazon 的适用于 Android 的 AWS Mobile SDK 及其 S3 上传实用程序未报告任何错误,知道为什么吗?

c# - DotNetZip 添加文件而不创建文件夹

c# - 如何使用 .NET 删除 Zip 文件中的目录?

c# - 在 azure blob 存储中就地创建 zip 文件

c# - 什么对象类型用于 Sitefinity 中的单个相关图像属性?

c# - 我不确定如何适本地扩展类

c# - 使用openXML SDK填充word模板数据

java - 如何更新现有 Amazon S3 文件的元数据?

ios - 如何在iOS中取消AWS 1.4.6 AmazonServiceRequest