我寫一個應用程序,我們需要不同的S3帳戶之間傳輸文件,我們不想保存在本地文件上傳到目的地S3帳戶。
所以我們用這個獲取源文件流:從Amazon S3的帳戶文件傳送到另一個
public Stream GetFileStream(string path)
{
var pathPieces = path.Split('/');
string bucket = pathPieces[0];
string fileName = pathPieces[pathPieces.Length - 1];
GetObjectRequest request = new GetObjectRequest();
request.BucketName = bucket;
request.Key = fileName;
GetObjectResponse response = Client.GetObject(request);
return response.ResponseStream;
}
而在這之後,我們使用這個流上的目標上傳:
TransferUtility transferUtility = new TransferUtility(Client);
transferUtility.S3Client.PutBucket(new PutBucketRequest() { UseClientRegion = true }.WithBucketName(bucket));
TransferUtilityUploadRequest request = new TransferUtilityUploadRequest()
.WithBucketName(bucket)
.WithKey(key)
.WithPartSize(1024)
.WithTimeout(100 * 60 * 60 * 1000)
.WithAutoCloseStream(true)
.WithCannedACL(S3CannedACL.PublicReadWrite)
.WithInputStream(fileStream) as TransferUtilityUploadRequest;
transferUtility.Upload(request);
但在最後一行的「上傳」功能,調用我總是得到這個錯誤: 這個流不支持查找操作。
是否有不同的方式做什麼,我試圖做的?因爲它沒有接縫的正確方法
在某種程度上充分說明,流傳輸的同時,你是無論如何下載整個文件,再重新上傳同一文件,你不保存任何帶寬在這裏,而不是讓它保存爲本地文件,然後上傳它。不必要的是要阻塞內存中的緩衝區或阻止網絡操作,這不是一個好的做法。 –
我的想法是獲取一些字節[buffersize]並傳輸它們,然後獲取其他內容並傳輸它們,如果同時傳輸100 GB的文件,則我的硬盤不會滿。糾正我,如果我錯了。 –
對於這樣大的文件,它無論如何都會失敗,因爲100GB的文件傳輸會有很多網絡故障,並上傳,S3首先需要的文件長度,以便它可以分爲多個部分文件,並同時上傳。因此,如果不先下載整個文件,傳輸實用程序將無法工作。 –