2016-12-12 2 views
1

Momentan verwende ich eine C# -App, um ein Bild von einer bekannten URL herunterzuladen und auf den AWS S3-Server hochzuladen.Kann AWS S3 zum Herunterladen einer Datei aufgefordert werden?

using (WebClient c = new WebClient()) 
{ 
    var data = c.DownloadData(ad.PhotoUrl); 
    var s3 = new AmazonS3Client(RegionEndpoint.EUWest1); 
    using (var memoryStream = new MemoryStream(data)) 
    { 
     using (var yourBitmap = new Bitmap(memoryStream)) 
     { 
      yourBitmap.Save(memoryStream, ImageFormat.Jpeg); 
      var titledRequest = new PutObjectRequest 
      { 
       CannedACL = S3CannedACL.PublicRead, 
       InputStream = memoryStream, 
       BucketName = myBucket, 
       Key = keyName 
      }; 
      s3.PutObject(titledRequest); 
     } 
    } 
} 

Es funktioniert gut, aber ich möchte diese Methode vermeiden, habe ich einen konstanten Fluss großes Bild zu speichern/löschen, so wäre es meine Bandbreite zu töten. Ist es möglich den "Download" Teil zu umgehen? Ich meine, kann ich den AWS S3-Server bitten, das Bild unter ad.PhotoUrl alleine herunterzuladen? C# wird für die "Fernanfrage" nicht benötigt. Ich möchte nur wissen, ob es möglich ist, also könnte ich ein bisschen graben, um eine Lösung zu finden.

Um es einfach zu machen, ich nur zu AWS S3 sagen: Hey können Sie dieses Bild herunterladen und für mich speichern? Statt: Hey, hier ist das Bild, das ich gerade heruntergeladen habe, kannst du es speichern?

Antwort

3

S3 kann dies nicht tun (weil es wirklich nur Dateispeicher macht), aber Sie können dies lösen, indem Sie eine Lambda-Funktion verwenden, die den Download initiiert und die Datei in S3 verschiebt. Die Lambda-Funktion wiederum kann über das AWS SDK oder eine API-Gateway-HTTP-Anfrage aufgerufen werden.

+0

Sieht aus wie es die einzige Lösung ist. Danke für die Idee, ich untersuche diese Lösung. – Gun

Verwandte Themen