2017-03-17 2 views
0

Ich versuche, einen Stream, den ich gerade abgerufen habe, erneut hochzuladen. Es sollte nicht wirklich wichtig sein, dass ich AWS verwende, glaube ich ... Vielleicht ist mein Verständnis von der Arbeit mit Streams einfach zu begrenzt? :-)Kopieren zwischen zwei AWS-Buckets - Stream von AWS zurückgegeben: HashStream unterstützt keine Suche

ich die folgende Methode gerade bin mit der AWS documentation zu Streams Download und Upload:

Datei-Upload:

public bool UploadFile(string keyName, Stream stream) 
{ 
using (client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1)) 
{ 
    try 
    { 
     TransferUtility fileTransferUtility = new TransferUtility(new AmazonS3Client(Amazon.RegionEndpoint.USEast1)); 

     fileTransferUtility.Upload(stream, bucketName, keyName); 

     return true; 
    } 
    catch (AmazonS3Exception amazonS3Exception) 
    { 
     [...] 
    } 
} 
} 

gibt es die Datei:

public Stream GetFile(string keyName) 
{  
using (client = new AmazonS3Client(Amazon.RegionEndpoint.USEast2)) 
{ 
    try 
    { 
     GetObjectRequest request = new GetObjectRequest 
     { 
      BucketName = bucketName, 
      Key = keyName 
     }; 

     GetObjectResponse response = client.GetObject(request); 
     responseStream = response.ResponseStream; 

     return responseStream; 
    } 
    catch (AmazonS3Exception amazonS3Exception) 
    { 
     [...] 
    } 
} 
} 

Jetzt versuche ich, die beiden Methoden zu kombinieren: Ich bekomme eine Strähne m und möchte es sofort wieder hochladen. Allerdings bekomme ich folgende Fehlermeldung: System.NotSupportedException : HashStream does not support seeking

Ich vermute es hat etwas zu tun, dass ich einen Stream bekomme, der jetzt irgendwie sofort bereit ist, wieder hochgeladen zu werden? Diese

ist, wie ich versuche, den Strom einer bestehenden Datei (.jpg) zu erhalten und sofort versuchen Sie es mit einem anderen Dateinamen zu laden:

newAWS.UploadFile(newFileName, oldAWS.GetFile(oldFile)); 

Wo newAWS und oldAWS Instanzen der AWS Klasse , und newFileName ist ein String :-) Dies ist die Zeile, die ich die Fehlermeldung oben eingefügt bekomme.

Bitte lassen Sie mich wissen, wenn ich etwas offensichtliches hier vermisse, warum ich einen abgerufenen Stream nicht erneut hochladen könnte. Oder könnte es sein, dass es sich auf etwas anderes bezieht, das mir nicht bewusst ist, und ich bin auf dem Holzweg, wenn ich versuche, den zurückgegebenen Stream zu beheben?

Was ich im Grunde versuche zu tun ist, eine Datei aus einem AWS-Bucket zu einem anderen mit Streams zu kopieren. Aber aus irgendeinem Grund bekomme ich die Fehlermeldung, dass ich versuche, den gerade heruntergeladenen Stream hochzuladen.

Vielen Dank für Ihre Zeit Graben durch meinen Code :-)

Antwort

0

nehmen wie es aussieht, dass mein Ansatz nicht funktioniert und ich bin nicht wirklich sicher, warum es nicht. Die gute Nachricht ist, dass Sie einfach den folgenden Code verwenden können von einem AWS Eimer in einen anderen zu kopieren:

static IAmazonS3 client; 
client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1); 

CopyObjectRequest request = new CopyObjectRequest() 
{ 
    SourceBucket  = bucketName, 
    SourceKey   = objectKey, 
    DestinationBucket = bucketName, 
    DestinationKey = destObjectKey 
}; 
CopyObjectResponse response = client.CopyObject(request); 

So habe ich nicht versuchen müssen, um diese Funktion erstellen Sie die Upload- und Download-Methoden Ich schrieb Verwenden Sie einfach die bereitgestellte Kopiermethode.

JEDOCH möchte ich immer noch wissen, warum mein Ansatz fehlgeschlagen ist? Ich glaube wirklich, dass mir etwas in Bezug auf die Ströme fehlt. Jede Rückmeldung würde sehr geschätzt werden :-)

Ich werde diese Frage als unbeantwortet lassen, da ich wirklich gerne wissen würde, was mir an Streams fehlt. Ich würde gerne eine Antwort als akzeptiert markieren, die mein fehlendes Wissen erklärt :-)

Verwandte Themen