Je suis en train d'écrire une application et nous avons besoin de transférer des fichiers entre différents comptes s3, nous ne voulons pas enregistrer le fichier localement avant de le télécharger sur le compte s3 de destination.
Ainsi nous obtenons le flux de fichier source en utilisant ceci:Transférer un fichier d'un compte amazon s3 à un autre
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;
}
Et après que nous utilisons ce flux à télécharger sur la destination:
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);
Mais sur la dernière ligne appel de la fonction « Envoyer » i Toujours obtenir cette erreur: Ce flux ne prend pas en charge les opérations de recherche.
Existe-t-il une façon différente de faire ce que j'essaie de faire? car il coud pas la bonne façon
D'une certaine manière, lors de la diffusion, vous téléchargez tout de même fichier entier et rechargeant le même fichier, vous ne sauvegardez pas une bande passante ici, au lieu laisser enregistrer en tant que locale fichier, puis le télécharger. Inutile que vous voulez bloquer les tampons en mémoire ou bloquer les opérations réseau, ce n'est pas une bonne pratique. –
Mon idée est d'obtenir quelques octets [buffersize] et de les transférer, puis d'en obtenir d'autres et de les transférer, comme ceci si 100 Go de fichiers sont transférés en même temps, mon disque dur ne sera pas plein. Corrigez-moi si je me trompe. –
Pour de tels fichiers énormes, il échouera de toute façon, pour le transfert de fichiers de 100 Go, il y aura de nombreuses défaillances réseau, et pour le téléchargement, S3 a besoin d'une longueur de fichier pour pouvoir diviser les fichiers en plusieurs parties. Donc, sans d'abord télécharger le fichier entier, l'utilitaire de transfert ne fonctionnera pas. –