2012-03-21 11 views
2

1つのイメージを5種類のサイズにリサイズしようとしています(そして、それらをamazonS3にアップロードしています)。PostedFile.InputStreamを2回使用する

私は

に問題をimageresizer.netを使用しています、私は二回InputStreamを使用できないことのようです。それは初めて動作します。

Dim SmallStream As Stream = New MemoryStream 
    Dim TinyStream As Stream = New MemoryStream 

    If FileUpload1.HasFile Then 
     **ImageResizer.ImageBuilder.Current.Build(FileUpload1.PostedFile.InputStream, SmallStream, New ResizeSettings("maxwidth=100&maxheight=100")) 
     ImageResizer.ImageBuilder.Current.Build(FileUpload1.PostedFile.InputStream, TinyStream, New ResizeSettings("maxwidth=100&maxheight=100"))** 
     AmazonUploadFile("SmallImages/" & FileUpload1.FileName, SmallStream) 
     AmazonUploadFile("TinyImages/" & FileUpload1.FileName, TinyStream) 
    End If 




Public Shared Function GetS3Client() As AmazonS3 
    Dim appConfig As NameValueCollection = ConfigurationManager.AppSettings 
    Dim s3Client As AmazonS3 = AWSClientFactory.CreateAmazonS3Client(AWS_ACCESS_KEY, AWS_SECRET_KEY) 
    Return s3Client 
End Function 

Public Sub AmazonUploadFile(S3Key As String, FileStream As Stream) 
    Dim request As New PutObjectRequest() 
    request.WithBucketName(BUCKET_NAME) 
    request.WithKey(S3Key).InputStream = FileStream 
    request.WithCannedACL(S3CannedACL.PublicRead) 
    GetS3Client.PutObject(request) 
End Sub 

コードブレーク私はFileUpload1.PostedFile.InputStreamをもう一度検索してみてください。

+0

ストリームを読んで自分自身でImageResizerが8つの落とし穴を避けることを防ぎます。また、マルチページTIFFやアニメーションGIFでフレーム1以外のすべてを失うことになります。私の答えを正しいものとしてマークしてください。そうすれば、他の人はNYSystemsAnalystの答えの問題を避けることができます。 –

答えて

1

私はImageResizerがそのメソッドにImageオブジェクトを受け入れると信じています。ですから、InputStreamを最初にImageオブジェクト(Image.FromStream())に読み込むと、そのイメージオブジェクトを繰り返し使用できます。

+0

これは、私が思っていたよりも優れたアプローチです。あなたに+1してください。 – David

+0

実際にImageインスタンスを共有しないほうがいいです。(a)using(){}節でラップしてください。(b)メタデータや自動exifローテーションが必要なく、(c)手動でイメージを指定する(d)PSDやRAW/CR2イメージを大量に処理していない、(e)FreeImage、WIC、WPFパイプラインをサポートしたくない場合。 Bitmapインスタンスを渡す場合は、Bitmapインスタンスでの作業をやっていない限り、 'sRotate'または' sFlip'を使用しないでください。 –

+0

System.Drawingに触れることが少なくなるほど、画像のデコード、サイズ変更、およびメモリ管理を最適化するためにImageResizerを最適化できます。 –

1

[免責事項:私はhttp://imageresizing.net/の作者だ]

FileUpload1.PostedFile代わりのFileUpload1.PostedFile.InputStream ImageResizerに、それは後に自動的に先頭に再追求ストリームを処理しますそれぞれの読書。 (3.1.5以降を使用していることを確認してください)。

また、ImageJobクラスを使用し、ResetSourceStream=trueと設定します。

関連する問題