2016-07-12 1 views
4

Нужна помощь, как я могу загрузить файл в ядре ASP.NET rc2 web api. Когда я использую asp.net 4.5 он работает с этим кодом:Asp.net Core rc2 web api загрузить файл

@{ 
ViewBag.Title = "Home Page"; 
    } 

<div> 
<input type="file" name="upload" id="uploadFile" /><br /> 
<button id="submit">Загрузить</button> 
</div> 

@section scripts{ 
<script type="text/javascript"> 

$('#submit').on('click', function (e) { 
    e.preventDefault(); 
    var files = document.getElementById('uploadFile').files; 
    if (files.length > 0) { 
     if (window.FormData !== undefined) { 
      var data = new FormData(); 
      for (var x = 0; x < files.length; x++) { 
       data.append("file" + x, files[x]); 
      } 

      $.ajax({ 
type: "POST", 
url: 'api/values/post', 
contentType: false, 
processData: false, 
data: data, 
success: function (result) { 
    alert(result); 
}, 
error: function (xhr, status, p3) { 
    alert(status); 
} 
}); 
     } else { 
      alert("Браузер не поддерживает загрузку файлов HTML5!"); 
     } 
    } 
}); 

}

public class ValuesController : ApiController 
{ 
public async Task<IHttpActionResult> Post() 
{ 
    if (!Request.Content.IsMimeMultipartContent()) 
    { 
     return BadRequest(); 
    } 
    var provider = new MultipartMemoryStreamProvider(); 
    // путь к папке на сервере 
    string root = System.Web.HttpContext.Current.Server.MapPath("~/Files/"); 
    await Request.Content.ReadAsMultipartAsync(provider); 

    foreach (var file in provider.Contents) 
    { 
     var filename = file.Headers.ContentDisposition.FileName.Trim('\"'); 
     byte[] fileArray = await file.ReadAsByteArrayAsync(); 

     using (System.IO.FileStream fs = new System.IO.FileStream(root + filename, System.IO.FileMode.Create)) 
     { 
      await fs.WriteAsync(fileArray, 0, fileArray.Length); 
     } 
    } 
    return Ok("файлы загружены"); 
} 
} 

Теперь, в основной asp.net RC2 он не работает, если использовать IFromFile в MVC без AJAX это работает, но мы используем JS + Ajax + WebAPI

+0

Это для Web Api 2, но не Asp.Net ядра. – trueboroda

ответ

6

в моей основной программе asp.net я изменил метод контроллера для

[HttpPost] 
public async Task<IActionResult> Upload(ICollection<IFormFile> file) 
{ 
    ...  
} 

Я добавил аннотацию [HttpPost] и использовал новый интерфейс IFormFile.

10

У меня была такая же проблема, и я решил это так:

[HttpPost] 
public async Task<IActionResult> PostFile() 
{ 
    //Read all files from angularjs FormData post request 
var files = Request.Form.Files; 
    ..... 
} 

Для полного решения вы можете также взять выглядеть on my question

+0

Фактически в ASP.NET Core '1.1.1'! –