2016-04-19 23 views
0

Ich bin neu mit Streams arbeiten und Probleme beim Hochladen einer Textdatei von einer Webanwendung auf AWS. Insbesondere wirft eine Umwandlung von HttpPostedFileBase.InputStream nach (Stream) keinen Fehler, aber der resultierende Stream enthält keine Daten, obwohl er eine Nullprüfung besteht, sodass der Upload "funktioniert", aber immer zu einem leeren Textdokument führt. Ich konnte diese Frage bei einer Suche nach SO nicht finden, der Code wurde aus den AWS SDK-Beispielen dupliziert, und der Eingabestream wurde in einen MemoryStream kopiert, wobei die Startposition auf Null gesetzt wurde, also bin ich hier am Ende . Weiß jemand, warum das nicht funktioniert und wie man es repariert? Danke im Voraus!HttpPostedFileBase.InputStream Cast to Stream im Hintergrund schlägt fehl

using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USWest1)) 
{ 
    Stream saveableStream = new MemoryStream(); 
    using (Stream source = (Stream)UploadedHttpFileBase.InputStream) 
    { 
     source.Position = 0; 
     source.CopyTo(saveableStream);//Results in no data! 
    } 
    saveableStream.Position = 0; 
    //Save File to Bucket           
    try 
    { 
     PutObjectRequest request = new PutObjectRequest 
     { 
      BucketName = bucketLocation, 
      Key = UploadedHttpFileBase.FileName, 
      InputStream = saveableStream 
     }; 
     PutObjectResponse response = client.PutObject(request); 
    } 
    catch (Exception e) 
    { 
     e.Message.ToString(); 
    } 
} 

Antwort

0

Die Antwort hier hatte etwas mit Verschachtelung zu tun und nichts mit dem veröffentlichten Code zu tun. Ich bin nicht ganz sicher, wie die Streams funktionieren, aber es gab einen StreamReader am Anfang der Frage-Methode, der den Wert einer initialen ReadLine überprüfte, um zu wissen, ob sie speichern soll oder nicht. Als ich den Code dieser Frage aus der while-Schleife mit den ReadLines entfernte, funktionierte der Upload. Nach der Reorganisation der Validierung ohne den verschachtelten Stream oder MemoryStream in der Frage funktioniert alles wie es soll.