Je suis un peu nouveau dans le concept de compartiment AWS s3. Je suis censé télécharger des fichiers du dossier "TODAY FILE1" dans s3 s3 et l'utiliser. Je sais comment le faire en ligne de commande en utilisant l'invite de commande. Je ne sais pas comment implémenter en C #.
Supposons que
Voici ce que je fais à l'invite de commande
string accessKey = "abc123"; string secretKey = "secret123"; string bucketName = "mys3bucket-output" TransferUtility fileTransferUtility = new TransferUtility(new AmazonS3Client(accessKey, secretKey, Amazon.RegionEndpoint.USEast2)); BasicAWSCredentials basicCredentials = new BasicAWSCredentials(accessKey,secretKey); AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials(accessKey, secretKey), Amazon.RegionEndpoint.USEast2); ListObjectsRequest request = new ListObjectsRequest(); ListObjectsResponse response = s3Client.ListObjects(request.BucketName= bucketName, request.Prefix="TODAY FILE1/"); foreach (S3Object obj in response.S3Objects) { try { Console.WriteLine("{0}", obj.Key); fileTransferUtility.Download(@"C:\Temp", bucketName, obj.Key); } catch (Exception Excep) { Console.WriteLine(Excep.Message, Excep.InnerException); } }
voici ce que je fais C # programme et obtenir une erreur
C:\> aws s3 cp "s3://mys3bucket-output/TODAY FILE1" . --recursive
J'obtiens une exception Amazon.Runtime.AmazonServiceException: 'L'accès au chemin' C: \ Temp 'est refusé
I je ne sais pas quoi faire Merci MR
3 Réponses :
Créez les fichiers avant d'écrire:
foreach (S3Object obj in response.S3Objects) { try { string filename = directoryPath + "\\" + obj.Key; FileStream fs = File.Create(filename); fs.Close(); Console.WriteLine("{0}", obj.Key); fileTransferUtility.Download(filename, bucketName, obj.Key); } catch (Exception ex) { Console.WriteLine(ex.Message, ex.InnerException); } }
Voici une autre façon de télécharger des fichiers à partir du compartiment S3. Supposons que si vous travaillez avec un compte Entreprise avec un client Entreprise, vous ne pourrez pas obtenir de clé d'accès et de clé secrète en raison de problèmes de sécurité. Dans ce scénario, vous pouvez utiliser l'extrait de code ci-dessous pour télécharger le fichier (tout type de fichier de format).
protected void button1_click(object sender, EventArgs e) { try { string _FullName = lbFile.CommandName.ToString(); string _FilePath = ConfigurationManager.AppSettings["SharedLocation"]; string bucketName = ConfigurationManager.AppSettings["S3BucketName"]; //First I am creating a file with the file name in my local machine in a shared folder string FileLocation = _FilePath + "\\" + _FullName; FileStream fs = File.Create(_FullName); fs.Close(); TransferUtility fileTransferUtility = new TransferUtility(); fileTransferUtility.Download(FileLocation, bucketName, _FullName); fileTransferUtility.Dispose(); WebClient webClient = new WebClient(); HttpResponse response = HttpContext.Current.Response; response.Clear(); response.ClearContent(); response.ClearHeaders(); response.Buffer = true; response.AddHeader("Content-Disposition", "attachment;filename=" + _FullName.ToString() + ""); byte[] data = webClient.DownloadData(FileLocation); File.Delete(FileLocation); //After download starts, then I am deleting the file from the local path which I created initially. response.BinaryWrite(data); response.End(); } }
Si vous avez besoin d'aide pour cette implémentation, n'hésitez pas à me contacter.
Vous devez mettre le nom du fichier: fileTransferUtility.Download (@ "C: \ Temp \ filename.xxx", bucketName, obj.Key);
Avez-vous un dossier nommé
C: \ Temp
sur votre machine? Ou existe-t-il un fichier nomméC: \ Temp
?Pourquoi voulez-vous télécharger "C: \ Temp"? Pouvez-vous essayer avec un fichier réellement existant auquel vous avez accès?
@devdimi le premier paramètre est le chemin cible
Yah j'ai un dossier C: \ temp sur ma machine locale
L'utilisateur que votre code exécute a-t-il les autorisations nécessaires pour écrire dans ce fichier? S'exécute-t-il en tant qu'administrateur?