2017-03-17 30 views
0

今検索したストリームを再アップロードしようとしています。私がAWSを使用していることは本当に重要ではないはずです...私の考えは...ストリームでの作業についての私の理解は、あまりにも限られていますか? :-)2つのAWSバケット間のコピー - AWSから返されたストリーム:HashStreamはシークをサポートしていません

私はストレート AWS documentationからのストリームをダウンロードしてアップロードするには、以下の方法を使用しています

ファイルアップロード:

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) 
    { 
     [...] 
    } 
} 
} 

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) 
    { 
     [...] 
    } 
} 
} 

は、ファイルの取得

今、私は2つの方法を組み合わせようとしています:私は、すぐにもう一度アップロードしたいと思っています。しかし、次のエラーメッセージが表示されています:System.NotSupportedException : HashStream does not support seeking

私はそれが何かを持っていると推測していますが、何とか今すぐすぐに再びアップロードする準備ができていますか?

これは私が既存のファイル(.JPG)のストリームを取得し、すぐに別のファイル名でそれをアップロードしようとしようとしています方法です:

newAWSとoldAWSは、AWSクラスのインスタンスである
newAWS.UploadFile(newFileName, oldAWS.GetFile(oldFile)); 

、newFileNameは文字列です:-) これは、上記のエラーメッセージが貼り付けられている行です。

なぜ私はフェッチされたストリームを再アップロードできないのかわかりません。それとも、それが私が気づいていない何かに関連していて、返されたストリームのトラブルシューティングを間違ったトラックにしている可能性がありますか?

私が基本的にしようとしているのは、ストリームを使用してAWSバケットから別のファイルにファイルをコピーすることです。しかし何らかの理由で、私がダウンロードしたばかりのストリームをアップロードしようとしているというエラーメッセージが表示されます。

はあなたに私のアプローチは動作しませんし、私はそれがない理由は本当にわからないことのように見えます

答えて

0

:-)私のコードを掘り、あなたの時間を割いて大変ありがとうございました。 良いニュースは、あなたは、単に別のAWSバケットからコピーするには、次のコードを使用することができ、次のとおりです。

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); 

だから私は、私が書いたアップロードとダウンロードの方法を使用してこの機能を再作成しようとする必要はありませんでした単に提供されたコピー方法を使用してください。

しかし、私はまだ私のアプローチが失敗していた理由を知りたいですか?私は本当に私がストリームについて何かを見逃していると思う。すべてのフィードバックは非常に高く評価されています:-)

私は本当にストリームに関して欠けていることを知りたいので、私はこの質問を未回答として残します。私は、私の欠けている知識を説明する受け​​入れられた答えに印をつけてうれしいです:-)

関連する問題