c# - 使用 C# 从 Azure Blob 复制到 AWS S3

标签 c# azure amazon-s3 azure-functions azure-blob-storage

请注意,这是我第一次用 C# 做任何事情,所以请友善,我可能犯了一些非常基本的错误。 (是的,我知道我不应该对 key 进行硬编码,但当代码执行我想要的操作时会修复它)。

我正在尝试创建一个 Azure 函数,将所有新项目从 Blob 存储复制到 AWS S3。我已成功使用本文中的代码从一个 blob 复制到另一个 blob:https://cmatskas.com/copy-azure-blob-data-between-storage-accounts-using-functions/

我尝试修改该代码以保存到 AWS S3 存储桶。虽然此代码成功编译并为我提供了成功的日志整体,但它不会复制任何文件。有什么想法吗?

using System;
using System.IO;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.S3.Transfer;
using Microsoft.Azure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;

public async static void Run(CloudBlockBlob myBlob, TraceWriter log) 
{
    await CopyBlob(myBlob, log);
}

private async static Task CopyBlob(CloudBlockBlob myBlob, TraceWriter log)
{
    var existingBucketName = "bucketname";
    var keyName = "backup";
    var accessKey = "key";
    var secretKey = "secretkey";

    TransferUtility fileTransferUtility = new TransferUtility(new AmazonS3Client(accessKey,secretKey,Amazon.RegionEndpoint.eu-west-2));

    log.Info("Starting Copy");

    try{
        using (var stream = await myBlob.OpenReadAsync())
        {
            await fileTransferUtility.UploadAsync(stream, existingBucketName, keyName);
        }
        log.Info("Copy completed");

    }
    catch(Exception ex){
        log.Error(ex.Message);
        log.Info("Copy failed");
    }
    finally{
        log.Info("Operation completed");
    }
}

编辑:让它为将来发现此问题的任何人工作。

using System;
using System.IO;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.S3.Transfer;
using Microsoft.Azure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;

public async static void Run(CloudBlockBlob myBlob, TraceWriter log) 
{
    await CopyBlob(myBlob, log);
}

private async static Task CopyBlob(CloudBlockBlob myBlob, TraceWriter log)
{
    var existingBucketName = "bucketname";
    var keyName = myBlob.Name;
    var accessKey = "accesskey";
    var secretKey = "secretkey";

    TransferUtility fileTransferUtility = new TransferUtility(new AmazonS3Client(accessKey,secretKey,Amazon.RegionEndpoint.eu-west-2));

    log.Info("Starting Copy");

    try{
        using (var stream = await myBlob.OpenReadAsync())
        {
            await fileTransferUtility.UploadAsync(stream,existingBucketName,keyName);
        }
        log.Info("Copy completed");

    }
    catch(Exception ex){
        log.Error(ex.Message);
        log.Info("Copy failed");
    }
    finally{
        log.Info("Operation completed");
    }
}

最佳答案

您应该会看到有关此问题的警告,但您的 void 方法可能会导致此处出现问题。

请将您的功能代码更新为以下内容:

public async static Task Run(CloudBlockBlob myBlob, TraceWriter log) 
{
    await CopyBlob(myBlob, log);
}

注意从 voidTask 的更改

关于c# - 使用 C# 从 Azure Blob 复制到 AWS S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46861723/

相关文章:

c# - 使用 RegEx 读取 CSV 文件

c# - 跟踪 .ToListing EF Linq 查询之前匹配的表达式数量

c# - Prism 绑定(bind)错误的 View 模型

sql-server - 将 CSV 从 Azure blob 加载到 Azure SQL 的 SSIS 步骤

angular - 服务工作线程不适用于 Azure 静态 Web 应用上的自定义域

azure - 使用 Azure 模板进行自定义部署

c# - 如何加速 tesseract OCR

node.js - Amazon CloudFront 能否接受 KMS 加密的 URL?

hadoop - 将 hadoop fs 路径转换为 ​​hdfs ://paths on EMR

amazon-web-services - 使用动态文件在 EC2 上挂载 S3 (s3fs) - 持久公共(public)权限