C# 获得';流不支持写入;以下代码中的异常
我试图上传一个图像到亚马逊S3,但在此之前,我正在调整图像的大小。为了调整大小,我必须传递流对象,并且在某一点(行注释为//Error)我得到“流不支持写入”异常。请帮忙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
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
是一个流