Il y a beaucoup de questions similaires sur Stack Overflow, mais je n'arrive pas à télécharger un gros fichier sur S3 via MVC.net.Télécharger des fichiers volumineux sur s3 avec ASP.net MVC
Sur la base des SSFE .net exemples sdk, et d'autres réponses, je donne les résultats suivants:
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);
}
}
}
L'application Web fonctionne parfaitement avec les petits fichiers et des fichiers volumineux téléchargera sur le site (hébergé par Rackspace Cloud Sites), mais le navigateur expire après environ 30 secondes après le post http, ce qui n'est pas suffisant pour télécharger le flux sur Amazon. Le navigateur expire car il ne reçoit pas de réponse du serveur.
Que dois-je faire pour que cela fonctionne pour les gros fichiers, ou comment télécharger un fichier sur S3?
C'est vrai, et merci pour vos commentaires. Le client du site Rackspace Cloud fonctionne bien, mais le temps nécessaire pour décharger vers S3 à partir de Rackspace provoque le problème du navigateur. Chrome permet seulement environ 30 secondes pour ce transfert avant l'expiration. Je suis en train de télécharger des fichiers sur l'hôte ok, en enregistrant dans le système de fichiers et en DB et en essayant d'exécuter une sorte de thread d'arrière-plan pour transférer vers S3. Cela fonctionne pour les petits fichiers, mais le problème persiste sur les grands fichiers (30 à 50mb). J'aurais pensé que c'était une tâche commune, et il y aurait quelques échantillons là-bas dans les terres .net. – Adrian