スタックオーバーフローに関してよく似た質問がありますが、大きなファイルをMVC.net経由でS3にアップロードする際に問題があります。ASP.netで大規模なファイルをs3にアップロードするMVC
AWS .NET SDKの例、およびいくつかの他の回答に基づいて、私は次のようしている:
public static void UploadToS3(System.IO.Stream stream, string bucketName, string keyName, bool asAttachement)
{
AmazonS3 client;
string accessKey = Settings.ApplicationSettings.AccessKeyID;
string secretKey = Settings.ApplicationSettings.SecretAccessKeyID;
// This config ensures s3 works in medium trust.
AmazonS3Config s3config = new AmazonS3Config();
s3config.UseSecureStringForAwsSecretKey = false;
using (client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey, s3config))
{
try
{
PutObjectRequest request = new PutObjectRequest();
request.WithBucketName(bucketName)
.WithKey(keyName)
.WithInputStream(stream);
if (asAttachement)
{
// add headers to ensure asset is downloaded, not opened in browser.
request.AddHeaders(Amazon.S3.Util.AmazonS3Util.CreateHeaderEntry("Content-Disposition", "attachment"));
}
S3Response response = client.PutObject(request);
response.Dispose();
}
catch(Exception ex)
{
throw new ApplicationException("Unable to upload asset." + ex.Message);
}
}
}
をウェブアプリは小さなファイルで完璧に動作し、大きなファイルをサイトにアップロードされます(でホストされていますRackspace Cloud Sites)、ブラウザは、HTTPポストから約30秒後にタイムアウトします。これは、ストリームをAmazonにアップロードするのに十分ではありません。ブラウザは、サーバーからの応答を受信しないとタイムアウトします。
このファイルを大容量ファイルで使用するにはどうすればよいですか?また、ファイルをS3にアップロードするにはどうすればよいですか?
フィードバックに感謝します。 Rackspace Cloudサイトへのクライアントは正常に動作しますが、RackspaceからS3にオフロードする時間はブラウザの問題を引き起こします。クロムは、タイムアウト前にこの転送に約30秒しかかかりません。私は現在、ホストにファイルをアップロードしています。ファイルシステムとdbに保存し、S3に転送するバックグラウンドスレッドを実行しようとしています。これは小さなファイルでは機能していますが、まだ大きなファイル(30〜50MB)には問題があります。私はこれが普通の仕事だと思っていたでしょうし、ネットの土地にいくつかのサンプルがあります。 – Adrian