2010-07-20 3 views
0

누구나 기본 바인더를 사용하여 바이트 파일 형식의 입력 파일 컨트롤 및 속성에 사용할 수 있습니까?ASP.NET MVC에서 바이트 [] aray에 자동 파일 입력 파일

내 뷰 모델이라는 이미지의 속성 내보기 이름 이미지, 기본 바인더 문제의 파일 입력 제어이 오류가있는 경우 : 그것이 들어 있으므로

입력이 유효한 자료-64 문자열이 아닌를 비 기본 64 자, 두 개 이상의 안쪽 여백 또는 공백이 아닌 공백 문자를 포함 할 수 있습니다.

답변

3

byte[] 어레이가 필요합니까? 기본 모델 바인더는 HttpPostedFileBase와 함께 작동 :

<% using (Html.BeginForm("upload", "home", FormMethod.Post, new { enctype = "multipart/form-data" })) { %> 
    <input type="file" name="file" id="file" /> 
    <input type="submit" value="Upload" /> 
<% } %> 

그리고이 문제를 처리 할 컨트롤러 조치 :

[HttpPost] 
public ActionResult Upload(HttpPostedFileBase file) 
{ 
    if (file.ContentLength > 0) 
    { 
     var fileName = Path.GetFileName(file.FileName); 
     var path = Path.Combine(Server.MapPath("~/App_Data"), fileName); 
     file.SaveAs(path); 
    } 
    return RedirectToAction("Index"); 
} 

이 여러 개의 파일로도 사용할 수 있습니다. 액션 메소드의 서명에는 IEnumerable<HttpPostedFileBase>을 사용하기 만하면됩니다.

+0

내 액션의 서명에는 뷰 모델이 있고 HttpPostedFileBase에는 뷰 모델 클래스가 있고, 뷰 모델 클래스에는 byte [] public 속성이 들어 있습니다. 그런 다음 HttpPostedFileBase의 내용을 내 바이트 [] Aray에 복사합니다. 왜? 왜냐하면 나는 지속성을 위해 직렬화를하고 있기 때문에 HttpPostedFileBase를 내 속성의 유형으로 사용할 수 없기 때문입니다. 데이터를 저장하기 위해 일부 DB를 사용했다하더라도 이미지 배열로 DB에 저장할 수 있도록 바이트 배열에 저장해야합니다. 그래서 기본 바인더가 자동으로 바이트 [] 배열에 바인딩 할 수 있는지 궁금 해서요. – mare

+0

내가하는 일을 더 쉽게 이해할 수 있도록 예제를 제공 한 것처럼 업로드 된 파일을 디스크에 거의 저장하지 않는다고 가정 해 보겠습니다. 업로드 된 파일이 있으면 XML 또는 DB에 저장됩니다. – mare

+0

뷰에 가깝고'HttpPostedFileBase'와 같은 속성을 포함하는 ViewModels을 사용해야합니다. 그러한 ViewModel는 지속되어서는 안됩니다. 원한다면'ViewModel '과'byte [] '를 포함 할 수있는 비즈니스 모델 사이에 매핑이 있어야합니다. 또한 파일 저장은 예제 일뿐입니다. 데이터베이스에 저장하는 것을 처리 할'byte []'를 전달하여 저장소를 호출 할 수 있습니다 (부차적 인 언급으로 업로드 된 파일을 SQL 데이터베이스에 저장하는 것은 좋지 않습니다). –

관련 문제