2016-07-07 140 views
2

所以要麼沒有人試圖做到這一點,或者我只是沒有找到任何東西。你會上傳文件的舊的方式是這樣的:如何將IFormFile保存到SQLServer FileStream表

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"); 
} 

我知道,對.NET核心採用IFormFile但所有的資源,我已經找到了保存它談論它保存到wwwroot文件夾在Web服務器上。我成功地將文件傳遞給我的控制器,但一直未能弄清楚如何將其轉換爲byte []以保存到DB FileStream表。

這裏是我當前的代碼:

[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"); 
    } 

如何轉換它與DB的FileStream

回答

1

工作以來,似乎有關於如何寫到SQL Server的文件流的文章,我將避免在此提及。

IFormFile有一個CopyToAsync方法,您可以使用。假設你掌握了SQL Server的文件流,所有需要做的事情都是:

await formFile.CopyToAsync(targetSqlFileStream);