Использование ОпубликованоFile.InputStream дважды - PullRequest
2 голосов
/ 21 марта 2012

Я пытаюсь изменить размер одного изображения до 5 разных размеров (а затем загрузить их в amazonS3).

Я использую imageresizer.net

Проблема, кажется, заключается в том, что яне может использовать входящий поток дважды.он работает в первый раз.

    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 во второй раз.

Ответы [ 2 ]

1 голос
/ 26 марта 2012

[Отказ от ответственности: я являюсь автором http://imageresizing.net/]

Передача FileUpload1.PostedFile вместо FileUpload1.PostedFile.InputStream в ImageResizer, и он будет автоматически обрабатывать повторный поиск потока в начале после каждого чтения.(Убедитесь, что вы используете версию 3.1.5 или более позднюю).

В качестве альтернативы используйте класс ImageJob и установите ResetSourceStream=true.

1 голос
/ 21 марта 2012

Я верю, что ImageResizer примет объекты Image для этого метода. Таким образом, вы можете сначала прочитать InputStream в объект Image (Image.FromStream ()), а затем повторно использовать этот объект изображения.

...