我需要从PowerShell脚本向S3上传文件(总共100GB,包含10GB的几个文件): http://docs.aws.amazon.com/powershell/latest/reference/Index.html(亚马逊简单存储服务)
我使用的是AWS SDK for .NET,适用于少量文件。我只是在前面的代码中创建了存储桶,并尝试使用Write-S3Object
上传所有文件Write-S3Object -Region $S3_Region -AccessKey $S3_AccessKey -SecretKey $S3_SecretKey -ServerSideEncryption "AES256" -Folder $sourceFolder -BucketName $S3_Bucket -Recurse -KeyPrefix "/"
但我有几个稳定性问题。它经常失败,有两种类型的错误。 (有4683个文件要上传)
将2664个对象上传到存储桶'bucket.test' 带有keyprefix'/'
的'R:\ temp \ files'
将35个对象上传到存储桶'bucket.test' 带有keyprefix'/'的'R:\ temp \ files' System.InvalidOperationException:指定的上载不存在。 上传ID可能无效,或者上传可能已中止或 完成。 ---> Amazon.S3.AmazonS3Exception:指定的上传功能 不存在。上传ID可能无效,或者上传可能已经无效 中止或完成。 ---> Amazon.Runtime.Internal.HttpErrorResponseException:远程服务器 返回错误:(404)未找到。 ---> System.Net.WebException:The 远程服务器返回错误:(404)Not Found。
所以我的问题是:
答案 0 :(得分:4)
我使用S3 TransferUtility对象,而不是使用Write-S3Object,而该对象能够使用分段上传来上传大文件。
我一直在使用下面的powershell脚本将文件上传到S3。
function UploadToAmazonUsingSDK()
{
param([string] $sourceLocation, [string] $bucketName, [string] $versionNumber)
Add-Type -Path "C:\Program Files (x86)\AWS SDK for .NET\bin\Net45\AWSSDK.dll"
$AccessKey= "your aws accesskey"
$SecretKey ="your secret key"
$s3Config=New-Object Amazon.S3.AmazonS3Config
$s3Config.UseHttp = $false
$s3Config.ServiceURL = "https://s3-eu-west-1.amazonaws.com"
$s3Config.BufferSize = 1024 * 32
$client=[Amazon.AWSClientFactory]::CreateAmazonS3Client($AccessKey,$SecretKey,$s3Config)
$transferUtility = New-Object -TypeName Amazon.S3.Transfer.TransferUtility($client)
$files = Get-ChildItem $sourceLocation
foreach ($fileName in $files) {
$amazonKey = $versionNumber + '/' + $fileName
Write-Host $amazonKey
Write-Host $fileName
Write-Host $fileName.FullName
$transferUtilRequest = New-Object -TypeName Amazon.S3.Transfer.TransferUtilityUploadRequest
$transferUtilRequest.BucketName = $bucketName
$transferUtilRequest.FilePath = $fileName.FullName
$transferUtilRequest.Key = $amazonKey
$transferUtilRequest.AutoCloseStream = $true
$transferUtility.Upload($transferUtilRequest)
}
}
答案 1 :(得分:2)
如果你是Golang粉丝,你可以尝试https://github.com/minio/mc。我们还有一个64位的Windows预编译二进制文件,可以与PowerShell,命令提示符等一起使用。
https://dl.minio.io:9000/updates/2015/Sept/windows-amd64/mc.exe
要添加S3凭据,只需执行
C:\> mc.exe config host add s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
mc.exe
实现了一个很好的进度条,彩色控制台输出,分段上传,会话管理等。
我们将在即将到来的一周发布一个新版本,它将支持32位和64位Windows。