2016-06-15 1 views
1

Я пытаюсь загрузить файл с помощью ASP.NET ядра Web Api: Как много я нашел этот код:Upload File .NET остова «IFormFile» не содержит определения для «SaveAsASync» и не метод расширения

namespace ModelBindingWebSite.Controllers { public class HomeController: Controller { private IHostingEnvironment _environment;

public HomeController(IHostingEnvironment environment) 
    { 
     _environment = environment; 
    } 
    public IActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public async Task<IActionResult> Index(ICollection<IFormFile> files) 
    { 
     var uploads = Path.Combine(_environment.WebRootPath, "uploads"); 
     foreach (var file in files) 
     { 
      if (file.Length > 0) 
      { 
       var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"'); 
       await file.SaveAsAsync(Path.Combine(uploads, fileName)); 
      } 
     } 
     return View(); 
    } 
} 

Я получаю ошибку «IFormFile» не содержит определение для «SaveAsASync» и нет методы расширения. Любая идея?

ответ

0

Пожалуйста, смотрите https://github.com/aspnet/HttpAbstractions/issues/610, который объясняет, почему этот метод вытесняется

+0

Так я должен заменить это : byte [] byteArray = Encoding.UTF8.GetBytes (uploads); MemoryStream stream = новый MemoryStream (byteArray); ждет файл.CopyToAsync (поток); –

+0

Yep - вы владеете потоком, поэтому не забывайте избавляться от него, когда он завершен, ... оберните новый memystream с помощью блока using() ... –

0

Вы можете просто создать удобное расширение для последующего использования

using System.IO; 
using System.Threading.Tasks; 
using Microsoft.AspNetCore.Http; 

public static class FileSaveExtension 
{ 
    public static async Task SaveAsAsync(this IFormFile formFile, string filePath) 
    { 
     using (var stream = new FileStream(filePath, FileMode.Create)) 
     { 
      await formFile.CopyToAsync(stream); 
     } 
    } 

    public static void SaveAs(this IFormFile formFile, string filePath) 
    { 
     using (var stream = new FileStream(filePath, FileMode.Create)) 
     { 
      formFile.CopyTo(stream); 
     } 
    } 


} 

Реализация:

formFile.SaveAsAsync("Your-File-Path"); // [ Async call ] 
formFile.SaveAs("Your-File-Path"); 
Смежные вопросы