2011-08-30 4 views
3

Amazon S3에 이미지를 업로드하려하지만 그 전에 이미지의 크기를 조정하려고합니다. 크기 조정을 위해 스트림 객체를 전달해야하고 한 지점 (// Error로 주석 처리 된 행)에서 '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<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(); 
    } 

답변

1

StreamReaderBaseStream입니다. 읽기는입니다. 이는 의미가 있습니다. 그래도이 스트림을 처음부터 다시 사용해야하는 이유는 무엇입니까? 내가 전문가 코더 모르지만 'putObjectRequest.InputStream은'개체의 'System.IO.Stream 스트림'유형이 걸리기 때문에 최선 지식, 내가이 일을하고

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

: 그냥 직접 메모리 스트림을 사용합니다. –

+1

@Umair :'MemoryStream'은'Stream'입니다. – BrokenGlass

+0

감사합니다. BrokenGlass, 도움이되었습니다 :) 해결되었습니다. –

0

입력 스트림은 출력 스트림을 지원하지 않으며 그 반대의 경우도 출력 스트림입니다. 그 의미가 바뀌 었는지 확인하십시오.

관련 문제