2011-06-14 3 views
0

업로드 할 때 silverlight를 사용하여 내 웹 사이트에 이미지를 업로드하고 업로드 할 때 진행률 막대와 취소 버튼을 표시 할 수있게하려는 mvc 3 페이지가 있습니다. . 하지만 HttpPostedFileBase 인수에 대한 내 컨트롤러에서 null 값이 계속 발생합니다. 여기 silverlight 4 파일을 mvc 3 컨트롤러에 업로드 HttpPostedFileBase is null

내 실버 업로드 코드 ...

 var client = new WebClient(); 
     client.Headers[HttpRequestHeader.ContentType] = "multipart/form-data"; 
     client.OpenWriteCompleted += (sender1, e1) => 
     {      
      PushData(stream, e1.Result); 
      e1.Result.Close(); 
      stream.Close(); 
     }; 

     client.UploadProgressChanged += (sender1, e1) => 
     { 
      this.pbStatus.Value = e1.ProgressPercentage; 
     }; 

     // get uri from params 
     param = App.Current.Host.InitParams["url"]; 
     var uri = new Uri(param, UriKind.Relative); 
     client.OpenWriteAsync(uri, "POST"); 

푸시 데이터 방법 ...

private void PushData(Stream input, Stream output) 
    { 
     byte[] buffer = new byte[4096]; 
     int bytesRead; 

     while ((bytesRead = input.Read(buffer, 0, buffer.Length)) != 0) 
     { 
      output.Write(buffer, 0, bytesRead); 
     } 
    }               

그리고 내 컨트롤러 코드 ...

[HttpPost] 
public ActionResult UploadTexture(HttpPostedFileBase file) 
{ 
} 

파일 PARAM입니다 컨트롤러가 호출 될 때 내 컨트롤러의 null입니다. 누구든지 내가 뭘 잘못하고 있는지 알아?

IHttpHandler를 구현하는 예제를 보았습니다.하지만이를 피하고 그냥 mvc 3 컨트롤러로만 고정하려고합니다.

답변

0

나는 당신과 같은 문제가있었습니다. 나는이 문제를 다른 방법으로 해결할 수 있었다.

foreach (FileInfo fi in uploadedFiles) 
     { 
      UriBuilder ub = new UriBuilder(Application.Current.Host.Source.Host + "/Excel/?fileName=" + fi.Name); 
      WebClient wc = new WebClient(); 
      wc.Headers[HttpRequestHeader.ContentType] = "multipart/form-data"; 
      wc.OpenWriteCompleted += (sender, e) => 
      { 
       FileStream data = fi.OpenRead(); 
       PushData(data, e.Result); 
       e.Result.Close(); 
       data.Close(); 
      }; 
      wc.OpenWriteAsync(ub.Uri, "POST"); 
     } 

주요 차이점은 파일 이름을 URL에 첨부한다는 것입니다. 내 PushData()는 동일합니다. MVC 측에서 나는 다음과 같은 것을 가지고있다 :

[HttpPost] 
    public ActionResult Index(string fileName) 
    { 
     using (FileStream fs = System.IO.File.Create(Server.MapPath("~/FilesExcel/" + fileName))) 
     { 
      SaveFile(Request.InputStream, fs); 
     } 

     return View(); 
    } 

    private void SaveFile(Stream stream, FileStream fs) 
    { 
     byte[] buffer = new byte[4096]; 
     int bytesRead; 

     while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0) 
     { 
      fs.Write(buffer, 0, bytesRead); 
     } 
    }