왜 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>
을 사용하기 만하면됩니다.
내 액션의 서명에는 뷰 모델이 있고 HttpPostedFileBase에는 뷰 모델 클래스가 있고, 뷰 모델 클래스에는 byte [] public 속성이 들어 있습니다. 그런 다음 HttpPostedFileBase의 내용을 내 바이트 [] Aray에 복사합니다. 왜? 왜냐하면 나는 지속성을 위해 직렬화를하고 있기 때문에 HttpPostedFileBase를 내 속성의 유형으로 사용할 수 없기 때문입니다. 데이터를 저장하기 위해 일부 DB를 사용했다하더라도 이미지 배열로 DB에 저장할 수 있도록 바이트 배열에 저장해야합니다. 그래서 기본 바인더가 자동으로 바이트 [] 배열에 바인딩 할 수 있는지 궁금 해서요. – mare
내가하는 일을 더 쉽게 이해할 수 있도록 예제를 제공 한 것처럼 업로드 된 파일을 디스크에 거의 저장하지 않는다고 가정 해 보겠습니다. 업로드 된 파일이 있으면 XML 또는 DB에 저장됩니다. – mare
뷰에 가깝고'HttpPostedFileBase'와 같은 속성을 포함하는 ViewModels을 사용해야합니다. 그러한 ViewModel는 지속되어서는 안됩니다. 원한다면'ViewModel '과'byte [] '를 포함 할 수있는 비즈니스 모델 사이에 매핑이 있어야합니다. 또한 파일 저장은 예제 일뿐입니다. 데이터베이스에 저장하는 것을 처리 할'byte []'를 전달하여 저장소를 호출 할 수 있습니다 (부차적 인 언급으로 업로드 된 파일을 SQL 데이터베이스에 저장하는 것은 좋지 않습니다). –