2016-07-07 18 views
2

아무도이 작업을 아직 시도하지 않았거나 아무 것도 찾지 못했습니다. 당신은 파일을 업로드 할 오래된 방법은 이것이다 :SQLServer FileStream 테이블에 IFormFile을 저장하는 방법

public class FileStorage 
{ 
    public string FileName { get; set; } 
    public byte[] FileStore { get; set; } 
} 

[HttpPost] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Create(HttpPostedFileBase file) 
{ 
    FileStorage fileAttachment = new FileStorage(); 

    using (Stream inputStream = file.InputStream) 
    { 
     MemoryStream memoryStream = inputStream as MemoryStream; 

     //Check to see if stream returned is already a MemoryStream 
     if(memoryStream == null) 
     { 
      memoryStream = new MemoryStream(); 
      inputStream.CopyTo(memoryStream); 
     } 

     fileAttachment.FileStore = memoryStream.ToArray(); 
     fileAttachment.FileName = file.FileName; 
    } 

    if (ModelState.IsValid) 
    { 
     db.FileAttachment.Add(fileAttachment); 
     await db.SaveChangesAsync(); 
     return RedirectToAction("Index"); 
    } 

    return RedirectToAction("Index"); 
} 

나는 닷넷 코어 IFormFile를 사용하는 것을 알고 있지만 모든 자원이 나는 웹 서버의 wwwroot 폴더에 저장에 대해 이야기 저장할 발견했다. 나는 성공적으로 파일을 내 컨트롤러에 전달하고 있지만 그것을 바이트 []로 변환하여 DB FileStream 테이블에 저장하는 방법을 알아 내지 못했습니다. I는 SQL 서버의 파일 스트림으로 작성하는 방법에 대한 많은 기사 것 같다 때문에 나는 DB하여 FileStream

답변

1

작업을 변환하려면 어떻게

[HttpPost] 
    public async Task<IActionResult> Upload(IFormFile uploadFile) 
    { 
     if (ModelState.IsValid) 
     { 
      var parsedContent = ContentDispositionHeaderValue.Parse(uploadFile.ContentDisposition); 
      var fileName = Path.Combine(_hostingEnvironment.WebRootPath, "Uploads", parsedContent.FileName.Trim('"')); 

      await uploadFile.SaveAsAsync(fileName); 

     } 

     return View("Index"); 
    } 

: 여기

내 현재 코드입니다 여기에서 언급하는 것을 피할 것입니다.

IFormFile에는 사용할 수있는 CopyToAsync 방법이 있습니다. SQL Server의 파일 스트림을 모두 가져와야한다고 가정하면 (예 :

)

await formFile.CopyToAsync(targetSqlFileStream);