2011-10-05 4 views
1

GetImage 동작 메서드를 직접 호출하면 (예 : localserver/admin/GetImage?ProductID=36) 파일을 다운로드하라는 메시지가 표시됩니다. 다운로드시 파일이 올바른 확장자를 가지고 있어도 열리지 않습니다. 내 그림 폴더의 일반 * .jpeg 이미지로 테스트하십시오. 또한 파일을 데이터베이스에 저장할 때 파일 이름을 어떻게 설정합니까? 파일 이름에 대해 데이터베이스에 추가 varchar 유형 등의 필드를 만들어야합니까?FileContentResult 및 HttpPostedFileBase를 사용하여 올바른 이미지 파일을 저장하고 반환하는 데 문제가 있습니다.

productMedia.ImageData에 일단 할당되면 데이터도 모두 0이므로 null이됩니다. 거기에 다양한 숫자가있는 "이미지"와는 다릅니다. 어쩌면 그것은 image.InputStream.Write가 아니고 image.InputStream.Read가 아닌가? 그것을 시도했지만 여전히가 없습니다.

if (image != null) 
      { 
       var ProductMedia = new ProductMedia(); 
       ProductMedia.ImageMimeType = image.ContentType; 
       ProductMedia.ImageData = new byte[image.ContentLength]; 
       image.InputStream.Read(ProductMedia.ImageData, 0, image.ContentLength); 
       ProductMedia.ProductID = product.ProductID; 
       context.ProductMedias.AddObject(ProductMedia); 
       context.SaveChanges(); 
      } 

과 된 GetImage 방법 : 올바른 콘텐츠 유형에 대한 귀하의 저장 프로 시저를 확인하여 GetImage 방법 문제

public FileContentResult GetImage(int productID) 
     { 

      var ProductImages = context.ProductMedias.FirstOrDefault(x => x.ProductID == productID); 

      if (ProductImages != null) 
      { 

       return File(ProductImages.ImageData, ProductImages.ImageMimeType); 

      } 
      else 
      { 
       return null; 
      } 


     } 

답변

1

아무것도 여기보기

@using (Html.BeginForm("SaveProduct", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" })) 

는 저장 프로 시저의 올바른 데이터. 그리고 데이터베이스에서 ImageData 열의 이미지 크기가 충분한 지 확인하십시오.
두 번째 질문에 예. 파일 이름에 별도의 열이 필요합니다.

+0

ImageData에 varbinary (MAX)를 사용합니다. – LaserBeak

0

다음은 사용해야하는 구문이며 작동합니다.

 if (image != null) 
     { 

      var product = new Product(); 

      product.FileName = image.FileName; //<- optional filename 
      product.ImageMimeType = image.ContentType; 
      int length = image.ContentLength; 
      byte[] buffer = new byte[length]; 
      image.InputStream.Read(buffer, 0, length); 
      product.ImageData = buffer; 

      //Save product to database 

     } 
관련 문제