2

我正在尝试将一张图片调整为 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当我第二次尝试检索时,代码会中断。

4

2 回答 2

1

我相信 ImageResizer 将接受该方法的 Image 对象。因此,您可以先将 InputStream 读入 Image 对象(Image.FromStream()),然后您可以重复使用该图像对象。

于 2012-03-21T15:34:16.280 回答
1

[免责声明:我是 http://imageresizing.net/ 的作者]

传递FileUpload1.PostedFile而不是传递FileUpload1.PostedFile.InputStream给 ImageResizer,它会在每次读取后自动处理重新寻找流到开头。(确保您使用的是 3.1.5 或更高版本)。

或者,使用ImageJobclass 和 set ResetSourceStream=true

于 2012-03-26T12:16:27.703 回答