我正在尝试将文件上传到Amazon S3。只要文件大小不超过1GB,效果很好。 如果是这样,Powershell在处理1 GB之后的第一个字节时遇到一些内存循环,并且永远不会进入我的写主机行 我只是无法弄清楚为什么会有限制以及如何处理。有什么想法吗?
(下面的代码片段打开一个文件流Reader + writer。我家用电脑上这个函数的真实代码包含一个额外的cryptostream writer,我为了代码的可读性而在这里删除了,以防万一有人想知道是什么代码应该是好的。结果是相同的 - >内存循环)
function S3Upload()
{
$FileStreamWriter = (New-Object Amazon.S3.IO.S3FileInfo($S3Client, $BucketName, $key)).OpenWrite()
$FileStreamReader = New-Object System.IO.FileStream($SourceFile, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read)
[int16]$Bytes2read = 16
[Byte[]]$Data = New-Object Byte[] 16
Do{
$Count = $FileStreamReader.Read($Data, 0, $Bytes2read)
$FileStreamWriter.Write($Data, 0, $Count)
}
While ($Count -gt 0)
write-host "Closing Streams"
$FileStreamReader.Close()
$FileStreamWriter.Close()
}
答案 0 :(得分:1)
使用S3FileInfo写入流对大文件不起作用。计算S3的签名需要所有数据,因此S3FileInfo会缓冲写入其流的数据,直到流关闭为止。
我建议使用TransferUtility并使用您的信息流中的Upload(stream, bucketName, key)
方法,有关详细信息和示例摘要,请参阅Using the High-Level .NET API for Multipart Upload。
由于您使用的是加密流,因此您可能需要查看添加到SDK第2版的S3加密支持,请参阅Client Side Data Encryption with AWS SDK for .NET and Amazon S3。