获得“Stream不支持写作”。 以下代码中的exception

我正在尝试将图像上传到Amazon S3,但在此之前我正在调整图像大小。 为了resize,我必须传递流对象,并在某一点(行注释为//错误)我得到’Stream不支持写入’。 例外。 请帮忙。

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

看起来StreamReaderBaseStream只读的 – 这是有道理的。 为什么你首先需要重新使用这个流? 只需直接使用内存流:

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

输入流不支持写入,反之亦然支持输出流。 看看你是否已经改变了它的含义。