[arrays] HttpPostedFileBase를 byte []로 변환

내 MVC 응용 프로그램에서 다음 코드를 사용하여 파일을 업로드하고 있습니다.

모델

 public HttpPostedFileBase File { get; set; }

전망

@Html.TextBoxFor(m => m.File, new { type = "file" })

모든 것이 잘 작동합니다 ..하지만 결과 파일을 byte []로 변환하려고합니다. 어떻게해야합니까?

제어 장치

 public ActionResult ManagePhotos(ManagePhotos model)
    {
        if (ModelState.IsValid)
        {
            byte[] image = model.File; //Its not working .How can convert this to byte array
        }
     }



답변

Darin이 말했듯이 입력 스트림에서 읽을 수 있지만 한 번에 사용 가능한 모든 데이터에 의존하는 것은 피하고 싶습니다. .NET 4를 사용하는 경우 간단합니다.

MemoryStream target = new MemoryStream();
model.File.InputStream.CopyTo(target);
byte[] data = target.ToArray();

CopyTo원하는 경우 .NET 3.5 와 동등한 것을 작성하는 것은 쉽습니다 . 중요한 부분은 HttpPostedFileBase.InputStream.

효율적인 목적을 위해 반환 된 스트림이 이미 다음인지 확인할 있습니다 MemoryStream.

byte[] data;
using (Stream inputStream = model.File.InputStream)
{
    MemoryStream memoryStream = inputStream as MemoryStream;
    if (memoryStream == null)
    {
        memoryStream = new MemoryStream();
        inputStream.CopyTo(memoryStream);
    }
    data = memoryStream.ToArray();
}


답변

입력 스트림에서 읽을 수 있습니다.

public ActionResult ManagePhotos(ManagePhotos model)
{
    if (ModelState.IsValid)
    {
        byte[] image = new byte[model.File.ContentLength];
        model.File.InputStream.Read(image, 0, image.Length); 

        // TODO: Do something with the byte array here
    }
    ...
}

파일을 디스크에 직접 저장하려면 model.File.SaveAs방법을 사용할 수 있습니다 . 다음 블로그 게시물이 유용 할 수 있습니다 .


답변