2017-02-13 2 views
0

MVC 컨트롤러의 내용으로 이미지를 업로드하려고합니다.MVC 작업 메서드에서 base64string에서 이미지를 만들 수 없습니다.

$scope.imageUpload = function (event) { 
     var files = event.target.files; //FileList object 
     fileString = event.target.files[0]; 
     for (var i = 0; i < files.length; i++) { 
      var file = files[i]; 
      var reader = new FileReader(); 
      reader.onload = $scope.imageIsLoaded; 
      reader.readAsDataURL(file); 
     } 
    } 
    $scope.imageIsLoaded = function (e) { 
     $scope.$apply(function() { 
      $scope.userProfilePic = e.target.result; 
      $.ajax({ 
       url: "FileUploadWithAjax", 
       type: "POST", 
       data: 'imageString=' + e.target.result.split(',')[1], 
       processData: false 
      }); 
     }); 
    } 

이미지가로드되면 해당 내용이 MVC 컨트롤러로 전송됩니다.

[System.Web.Mvc.HttpPost] 
     public void FileUploadWithAjax([FromBody]string imageString) 
     { 
      bytes = Convert.FromBase64String(imageString); 
      using (MemoryStream ms = new MemoryStream(bytes)) 
      { 
       Image image = Image.FromStream(ms); 
       image.Save("myBlargyImage.jpg"); 
      } 
     } 

하지만 스트림에서 이미지를 만드는 동안 문제가 발생합니다. "잘못된 매개 변수"라는 오류가 발생합니다.

유형 'System.ArgumentException'형식의 예외가 는 System.Drawing.dll에서 발생했지만 사용자 코드에서

추가 정보 처리되지 않은 : 매개 변수가 유효하지 않습니다.

스택 추적

에서 System.Drawing.Image.FromStream에서 System.Drawing.Image.FromStream (스트림 스트림, 부울 useEmbeddedColorManagement, 부울 validateImageData) (스트림 스트림)에서 Micraft.BBraun.Controllers.EmployeeController.FileUploadWithAjax (문자열 imageString) D : \ B Braun \ mvc 31 JAN 2017 \ Micraft.BBraun \ Controllers \ EmployeeController.cs : line 351 at lambda_method (Closure, Controlle rBase, Object [])에서 System.Web.Mvc.ActionMethodDispatcher. <> c__DisplayClass1.b__0 (ControllerBase 컨트롤러, 오브젝트 [] 파라메터) System.Web.Mvc.ActionMethodDispatcher.Execute에서 System.Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext 에서 (ControllerBase 제어기는 [] 매개 개체) controllerContext, IDictionary System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult 2.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.End()에서의 System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39 (IAsyncResult를 asyncResult, ActionInvocation innerInvokeState)에서 파라메터) System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod (IAsyncResul System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters에서 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d()에서 t asyncResult). <> c__DisplayClass46.b__3f()

UPDATE

난 그냥 HTML로 소스에서 이미지 텍스트를 복사 할 때 http://codebeautify.org/base64-to-image-converter

처럼 base64string에서 이미지를 생성 할 수있는 온라인 도구를 확인하고, 위의 사이트에서 이미지를 생성 할 수있었습니다.

그 후 나는 내 서버 측 방법으로 이미지 콘텐츠를 복사하려고했지만 놀랍게도 이미지를 생성 할 수 없었다.신중하게 울부 짖는 이미지를 선택하면

그럼 내가 이미지의 내용에있는 "+"기호있을 때마다 같은 몇 가지 변경 사항을 볼 수 있습니다, 일부 diferences에게

을 모두 텍스트를 비교 발견, 그 "빈 공간"으로 대체.

이 데이터를 서버에 게시하는 동안 사용해야하는 콘텐츠 유형이 있습니까?

Right side data are working(copied from client side - left side data are not working copied from server side method)

답변

0

당신은 서버에 전송되는 데이터에 encodeURIComponent()를 사용해야합니다. 따라서, 귀하의 아약스 요청에 다음과 않는 :

data: 'imageString=' + encodeURIComponent(e.target.result.split(',')[1]), 

, 그 작업을 잘, 감사 남자 끝내 그 AJAX POST and Plus Sign (+) -- How to Encode?

+0

하세요! –

+0

하지만 메모리 스트림에서 이미지를 만드는 동안 다른 오류가 발생합니다. 'GDI +에서 일반적인 오류가 발생했습니다.' –

+0

음 ...'using '문에서'Image image = ...'을 감쌀 것입니다. 또한 파일이 저장되는 위치를 확인하십시오 (권한이있는 경우). – erdinger