2016-04-19 7 views
0

を持っていない私は、Webアプリケーションからのサンプル.txtファイルでSDKを使用してAWSにアップロードする方法をテストしています。ファイルはバケットにアップロードされますが、バケットからダウンロードされたファイルは元のアップロードファイルのテキストがない空のメモ帳ドキュメントです。私はストリームで作業することに新しいので、ここで何が間違っているのかは分かりません。転送要求でデータが送信されない理由は誰にも見えますか?前もって感謝します!HttpPostedFileBase AWS SDKバケットにストリームのアップロードがデータ

using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USWest1)) 
{ 
    //Save File to Bucket 
    using (FileStream txtFileStream = (FileStream)UploadedHttpFileBase.InputStream) 
    { 
     try 
     { 
      TransferUtility fileTransferUtility = new TransferUtility(); 
      fileTransferUtility.Upload(txtFileStream, bucketLocation, 
       UploadedHttpFileBase.FileName); 
     } 
     catch (Exception e) 
     { 
      e.Message.ToString(); 
     } 
    } 
} 

EDIT:

TransferUtilityとPutObjectRequest/PutObjectResponse/AmazonS3Client.PutObjectの両方が空のテキストファイルを保存しました。その後、新しいFileStreamのインスタンス化に問題が発生した後、開始位置をゼロにリセットした後に使用されるMemoryStreamは空のテキストファイルを保存しました。何か案は?

新しいコード:

using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USWest1)) 
{ 
    Stream saveableStream = new MemoryStream(); 
    using (Stream source = (Stream)UploadedHttpFileBase.InputStream) 
    { 
     source.Position = 0; 
     source.CopyTo(saveableStream); 
    } 

    //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(); 
    } 
} 

答えて

0

答えはここに掲載のコードは、本質的に間違っていたので、少し私の理解を超えて残っている、とないている、ネスティングとは何かを持っていました。このコードは、最初のStreamReaderの後に来て、テキストファイルの最初の行をチェックして、ファイルを保存するかどうかを決定しました。 ReadLinesを実行するwhileループからコードを移動した後、アップロードが機能しました。検証が再編成され、ネストされたStreamまたはMemoryStreamの必要がないようになった今、すべてが機能します。

0

おそらくTransferUtilityは、一時アップロードファイルとの良好な動作しないこと。 (あなたが必ずをしている場合、それはいくつかの点であなたをOutOfMemoryを与えないだろう例えば、他のそれほど一時ファイルに、あるいはのMemoryStream)どこかの入力ストリームをコピーしよう。もう一つは、TransferUtilityを取り除き、低レベルのAmazonS3Client.PutObjectを使用してストリームの有効期間を細かく制御することです(S3 APIがランダムな一時エラーを返す傾向があるため、再試行する必要があることを忘れないでください)。

+0

答えをくれてありがとう、アンドレイ。 TransferUtilityとPutObjectRequest/PutObjectResponse/AmazonS3Client.PutObjectの両方を使用し、両方とも空のテキストファイルを保存しました。 MemoryStreamを使用せずに入力ストリームを非一時ファイルにコピーするにはどうすればよいですか? – jle

+0

私はMemoryStreamを使用していますが、その場合に備えて開始位置を0にリセットしましたが、空のファイルはまだ保存されています。何か案は? – jle