使用TransportUtility
类将文件上传到S3时,可以选择使用FilePath
或输入流。我正在使用多部分上传。Amazon S3传递使用FilePath或Stream?
我正在上传各种东西,其中一些是磁盘上的文件,另一些是原始流。我目前正在使用InputStream
这个品种,但是我想知道是否应该进一步改进这个方法。对于磁盘上的文件,我基本上使用File.OpenRead
并将该流传递给传输请求的InputStream
。
是否有任何性能增益或其他方式优于FilePath
方法而不是InputStream
方法,其中输入被称为文件。
简而言之:这是同样的事情
using (var fs = File.OpenRead("some path"))
{
var uploadMultipartRequest = new TransferUtilityUploadRequest
{
BucketName = "defaultBucket",
Key = "key",
InputStream = fs,
PartSize = partSize
};
using (var transferUtility = new TransferUtility(s3Client))
{
await transferUtility.UploadAsync(uploadMultipartRequest);
}
}
由于:
var uploadMultipartRequest = new TransferUtilityUploadRequest
{
BucketName = "defaultBucket",
Key = "key",
FilePath = "some path",
PartSize = partSize
};
using (var transferUtility = new TransferUtility(s3Client))
{
await transferUtility.UploadAsync(uploadMultipartRequest);
}
抑或是两者之间有任何显著区别?我知道文件是否很大,并且可以基于此选择一种或另一种方法。
编辑:我也做了S3Client的一些反编译,并有确实似乎是关于转移的并发级别差一些,在MultipartUploadCommand.cs
private int CalculateConcurrentServiceRequests()
{
int num = !this._fileTransporterRequest.IsSetFilePath() || this._s3Client is AmazonS3EncryptionClient ? 1 : this._config.ConcurrentServiceRequests;
if (this._totalNumberOfParts < num)
num = this._totalNumberOfParts;
return num;
}
即使其中一个比另一个慢100倍,它与光盘的IO速度相比并不重要,但它选择的代码行数少于其他代码的版本,因此可以更快地理解和维护它程序员。 – 2014-11-04 14:26:01