2016-06-15 46 views
1

我試圖上傳一個使用ASP.NET核心Web Api的文件: 很多我發現這個代碼:文件上傳.NET Core'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 = new MemoryStream(byteArray); await file.CopyToAsync(stream); –

+0

是的 - 你自己的流,所以不要忘記處理它完成以及...用一個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"); 
相關問題