Objekt von AWS S3 als stream
Ich versuche, herauszufinden, ob es möglich wieder einige Art von stream (evtl. ein Speicher-stream???) von einem Objekt, die ich von meinen AWS S3 bucket.
Den S3-bucket enthält eine Menge von verschiedenen Art von Bilder, Dokumenten usw. All jene sollten auf meiner website verwendet. Jedoch, ich nicht wollen, um den Pfad zu meiner AWS-S3-bucket.
Das ist, warum ich bin versucht, einen stream erstellen und anzeigen der Bilder und Download-Dokumente on-the-fly anstatt mit einem vollständigen Pfad. Macht das Sinn? 🙂
Ich bin mit dem C# -/.NET AWS SDK.
Freuen uns über alle Ideen und Richtungen spitz zu!
public FileStream GetFile(string keyName)
{
using (client = new AmazonS3Client(Amazon.RegionEndpoint.USEast2))
{
GetObjectRequest request = new GetObjectRequest
{
BucketName = bucketName,
Key = keyName
};
using (GetObjectResponse response = client.GetObject(request))
using (Stream responseStream = response.ResponseStream)
using (StreamReader reader = new StreamReader(responseStream))
{
//The following outputs the content of my text file:
Console.WriteLine(reader.ReadToEnd());
//Do some magic to return content as a stream
}
}
}
- Dies funktioniert, wenn Sie ausblenden möchten den Weg zu Ihrem Eimer, docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
In .NET 4, können Sie Stream.CopyTo zu kopieren Sie den Inhalt der ResponseStream (das ist ein Amazon.- Laufzeit.Intern.Util.MD5Stream) zu einem MemoryStream.
Wo
client.GetObjectAsync(bucketName, keyName)
ist eine alternative zum AufrufGetObject
mit der Anforderung, die Sie erstellen.Dispose
desResponseStream
. AWS-docs " zeigen ", um diesen stream ohne zu lecken...bitte wickeln Sie den Zugang zu den stream in einem using-block".Sogar billiger Weg ist, um die pre-signierten URLs für Objekte in S3. So können Sie die Rückgabe ablaufende URLs auf Ihre Ressourcen und brauchen nicht zu tun, jeden stream kopiert. Sehr wenig Speicher erforderlich ist, so dass Sie können verwenden Sie einen sehr kleinen und günstigen VM.
Dieser Ansatz funktionieren würde, für ein paar Ressourcen, und nur wenige Kunden. Mit mehr Anfragen können Sie schlagen AWS-API beschränkt.