2016-09-04 2 views
13

Я пытаюсь сохранить файл на диске с помощью this piece of code.Как сохранить IFormFile на диск?

IHostingEnvironment _hostingEnvironment; 
public ProfileController(IHostingEnvironment hostingEnvironment) 
{ 
    _hostingEnvironment = hostingEnvironment; 
} 

[HttpPost] 
public async Task<IActionResult> Upload(IList<IFormFile> files) 
{ 
    foreach (var file in files) 
    { 
     var fileName = ContentDispositionHeaderValue 
      .Parse(file.ContentDisposition) 
      .FileName 
      .Trim('"'); 

     var filePath = _hostingEnvironment.WebRootPath + "\\wwwroot\\" + fileName; 
     await file.SaveAsAsync(filePath); 
    } 
    return View(); 
} 

я был в состоянии заменить IApplicationEnvironment с IHostingEnvironment и ApplicationBasePath с WebRootPath.

Похоже IFormFile не SaveAsAsync() больше. Как мне сохранить файл на диск?

+2

'WebRootPath' уже включает в себя' wwwroot' https://blog.mariusschulz.com/2016/05/22/getting-the-web-root -path-and-the-content-root-path-in-asp-net-core – Nkosi

+0

Я этого не знал. Спасибо – Richard77

+0

Проверьте эту статью о том, как загрузить файлы http://www.mikesdotnetting.com/article/288/uploading-files-with-asp-net-core-1-0-mvc – Nkosi

ответ

18

Несколько вещей изменилось с тех пор релиз кандидата сердечника

public class ProfileController : Controller { 
    private IHostingEnvironment _hostingEnvironment; 

    public ProfileController(IHostingEnvironment environment) { 
     _hostingEnvironment = environment; 
    } 

    [HttpPost] 
    public async Task<IActionResult> Upload(IList<IFormFile> files) { 
     var uploads = Path.Combine(_hostingEnvironment.WebRootPath, "uploads"); 
     foreach (var file in files) { 
      if (file.Length > 0) { 
       var filePath = Path.Combine(uploads, file.FileName); 
       using (var fileStream = new FileStream(filePath, FileMode.Create)) { 
        await file.CopyToAsync(fileStream); 
       } 
      } 
     } 
     return View(); 
    } 
} 

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

  • Нет связанных вопросов^_^