C# 获得';流不支持写入;以下代码中的异常

C# 获得';流不支持写入;以下代码中的异常,c#,stream,.net,C#,Stream,.net,我试图上传一个图像到亚马逊S3,但在此之前,我正在调整图像的大小。为了调整大小,我必须传递流对象,并且在某一点(行注释为//Error)我得到“流不支持写入”异常。请帮忙 public ActionResult AddPost(AddPost post) { Guid guid = new Guid(); AccountController ac=new AccountController(); string randomId = gu

我试图上传一个图像到亚马逊S3,但在此之前,我正在调整图像的大小。为了调整大小,我必须传递流对象,并且在某一点(行注释为//Error)我得到“流不支持写入”异常。请帮忙

 public ActionResult AddPost(AddPost post)
    {
        Guid guid = new Guid();
        AccountController ac=new AccountController();

        string randomId = guid.ToString();

        PutAttributesRequest putAttributesAction = new PutAttributesRequest().WithDomainName("ThisIsMyEXDomainPosts").WithItemName(randomId);

        List<ReplaceableAttribute> attrib = putAttributesAction.Attribute;

        System.IO.Stream stream;

        System.IO.StreamReader sr = new System.IO.StreamReader(post.imageFileAddress.ToString());


        sr.ReadToEnd();

        stream = sr.BaseStream;

        Amazon.S3.Model.PutObjectRequest putObjectRequest = new Amazon.S3.Model.PutObjectRequest();

        System.Drawing.Image img = System.Drawing.Image.FromStream(stream);

        System.Drawing.Image imgResized = ResizeImage(img, 640, 800);

        System.IO.MemoryStream mstream = new System.IO.MemoryStream();

        imgResized.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg);

        mstream.WriteTo(stream);//Error

        putObjectRequest.WithBucketName("TIMEXImages");
        putObjectRequest.CannedACL = Amazon.S3.Model.S3CannedACL.PublicRead;
        putObjectRequest.Key = randomId + "_0.jpg";
        putObjectRequest.InputStream = stream;

        Amazon.S3.Model.S3Response s3Response = as3c.PutObject(putObjectRequest);
        s3Response.Dispose();

        //Uploadig the Thumb

        System.Drawing.Image imgThumb = ResizeImage(img, 80, 100);

        imgThumb.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg);

        mstream.WriteTo(stream);

        putObjectRequest.WithBucketName("MyProjectImages");
        putObjectRequest.CannedACL = Amazon.S3.Model.S3CannedACL.PublicRead;
        putObjectRequest.Key = randomId + ".jpg";
        putObjectRequest.InputStream = stream;

        Amazon.S3.Model.S3Response s3Response2 = as3c.PutObject(putObjectRequest);
        s3Response2.Dispose();


        //Closing all opened streams
        sr.Close();

        stream.Close();

        mstream.Close();



        //Adding to SimpleDB
        attrib.Add(new ReplaceableAttribute().WithName("category").WithValue(post.category));
        attrib.Add(new ReplaceableAttribute().WithName("description").WithValue(post.description));
        attrib.Add(new ReplaceableAttribute().WithName("favoriteCount").WithValue("0"));
        attrib.Add(new ReplaceableAttribute().WithName("imageThug").WithValue(randomId));
        attrib.Add(new ReplaceableAttribute().WithName("title").WithValue(post.title));
        attrib.Add(new ReplaceableAttribute().WithName("userId").WithValue(ac.GetLoggedInUserId()));

        sdb.PutAttributes(putAttributesAction);




        return View();
    }
public ActionResult AddPost(AddPost)
{
Guid=新Guid();
AccountController ac=新的AccountController();
字符串randomId=guid.ToString();
PutAttributesRequest putAttributesAction=新的PutAttributesRequest()。WithDomainName(“ThisIsMyEXDomainPosts”)。WithItemName(randomId);
List attrib=putAttributesAction.Attribute;
System.IO.Stream;
System.IO.StreamReader sr=新的System.IO.StreamReader(post.imageFileAddress.ToString());
高级ReadToEnd();
流=sr.基流;
Amazon.S3.Model.PutObjectRequest PutObjectRequest=新的Amazon.S3.Model.PutObjectRequest();
System.Drawing.Image img=System.Drawing.Image.FromStream(流);
System.Drawing.Image imgResized=大小图像(img,640800);
System.IO.MemoryStream mstream=新的System.IO.MemoryStream();
保存(mstream,System.Drawing.Imaging.ImageFormat.Jpeg);
mstream.WriteTo(stream);//错误
putObjectRequest.WithBucketName(“TIMEXImages”);
putObjectRequest.CannedACL=Amazon.S3.Model.S3CannedACL.PublicRead;
putObjectRequest.Key=randomId+“_0.jpg”;
putObjectRequest.InputStream=流;
Amazon.S3.Model.S3Response S3Response=as3c.PutObject(putObjectRequest);
s3Response.Dispose();
//上传拇指
System.Drawing.Image imgThumb=尺寸图像(img,80100);
保存(mstream,System.Drawing.Imaging.ImageFormat.Jpeg);
mstream.WriteTo(流);
putObjectRequest.WithBucketName(“MyProjectMages”);
putObjectRequest.CannedACL=Amazon.S3.Model.S3CannedACL.PublicRead;
putObjectRequest.Key=randomId+“.jpg”;
putObjectRequest.InputStream=流;
Amazon.S3.Model.S3响应S3响应2=as3c.PutObject(putObjectRequest);
s3Response2.Dispose();
//关闭所有打开的流
高级关闭();
stream.Close();
mstream.Close();
//添加到SimpleDB
attrib.Add(new replacableattribute().WithName(“category”).WithValue(post.category));
attrib.Add(new replacableattribute().WithName(“description”).WithValue(post.description));
attrib.Add(new ReplaceableAttribute().WithName(“favoriteCount”).WithValue(“0”);
attrib.Add(new ReplaceableAttribute().WithName(“imageThug”).WithValue(randomId));
attrib.Add(new replacableattribute().WithName(“title”).WithValue(post.title));
attrib.Add(new replacableattribute().WithName(“userId”).WithValue(ac.GetLoggedInUserId());
sdb.PutAttributes(putAttributesAction);
返回视图();
}

输入流不支持写入,反之亦然,输出流支持写入。看看你是否交换了它的意思。

看起来
流阅读器的
基流
是只读的,这很有意义。但是,为什么首先需要重新使用这个流呢?直接使用内存流即可:

mstream.Position = 0;
putObjectRequest.InputStream = mstream;

我不是一个专业的编码员,但就我所知,我这样做是因为“putObjectRequest.InputStream”接受“System.IO.Stream Stream”类型的对象。@Umair:
MemoryStream
是一个