2016-09-04 26 views
13

Próbuję zapisać plik na dysku przy użyciu this piece of code.Jak zapisać plik IForm na dysku?

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

byłem w stanie zastąpić IApplicationEnvironment z IHostingEnvironment i ApplicationBasePath z WebRootPath.

Wydaje się IFormFile nie ma SaveAsAsync() więcej. Jak mogę zapisać plik na dysku?

+2

'WebRootPath' zawiera już' wwwroot' https://blog.mariusschulz.com/2016/05/22/getting-the-web-root -path-and-the-content-root-path-in-asp-net-core – Nkosi

+0

Nie wiedziałem o tym. Dziękujemy – Richard77

+0

Sprawdź ten artykuł na temat przesyłania plików http://www.mikesdotnetting.com/article/288/uploading-files-with-asp-net-core-1-0-mvc – Nkosi

Odpowiedz

18

kilka rzeczy się zmieniło od rdzenia kandydatów uwalniania

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