Has*_*nas 6 c# amazon-s3 azure azure-blob-storage azure-functions
请注意,这是我第一次用 C# 做任何事情,所以请善待,我可能犯了一些非常基本的错误。(是的,我知道我不应该对密钥进行硬编码,但会在代码执行我想要的操作时修复它)。
我正在尝试创建一个 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");
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:让它为将来找到它的任何人工作。
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");
}
}
Run Code Online (Sandbox Code Playgroud)
您应该会看到有关此问题的警告,但您的void方法可能会导致此处出现问题。
请将您的功能代码更新为以下内容:
public async static Task Run(CloudBlockBlob myBlob, TraceWriter log)
{
await CopyBlob(myBlob, log);
}
Run Code Online (Sandbox Code Playgroud)
void注意从到 的变化Task