2016-07-07 2 views
2

Так или никто не пытался это сделать, или я просто ничего не нахожу на нем. Старый способ вы бы загрузить файл это:Как сохранить IFormFile в SQLServer FileStream Table

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 на веб-сервере. Я успешно передаю файл моему контроллеру, но не смог понять, как его преобразовать в байт [], чтобы сохранить его в таблице 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"); 
    } 

Как преобразовать его для работы с БД FileStream

ответ

1

Так, кажется, много статей о том, как писать в файловый поток SQL-Server, я избегайте упоминания здесь.

IFormFile имеет способ CopyToAsync который вы можете использовать. Предположим, вы овладели файловым потоком SQL Server, все это должно было бы быть

await formFile.CopyToAsync(targetSqlFileStream);

Смежные вопросы