2016-12-06 69 views
2

我正尝试从角度为1.5x的表单数据上传文件到.net核心web api控制器。 我的控制器看起来像这样使用asp.net核心中的表单数据上传文件

[HttpPost]public async Task<ObjectResult> Create(TutorModel model) 
    { 
    } 

我POST方法

return $http.post("/api/Tutor/createTutor/", 
 
     data, 
 
       { 
 
        withCredentials: false, 
 
        headers: { 'Content-Type': undefined }, 
 
        transformRequest: angular.identity, 
 
        responseType: "arryabuffer" 
 
       }); 
 

 

 
Where data is 
 

 

 
for (var i = 0; i < vm.uploadedFiles.length ; i++) { //vm.upload contains list of file 
 
       data.append(vm.uploadedFiles[i].name, vm.uploadedFiles[i]); 
 
      } 
 
      data.append("tutor", tutor); //tutor is json object

现在,当它发布到控制器,型号不包含任何属性值。如果我看到Request.Form.Files,我会在控制器中获取上传的文件。发送模型到Post方法的最佳方法是什么?任何指针?谢谢

+1

https://www.asp.net/web-api/overview/advanced/sending-html-form-data-part-2 - 应该帮助 – Developer

+0

@Developer我寻找asp.net核心例子。感谢您的链接,虽然 – Aryan

回答

1

Asp.net核心文档简要介绍了该主题。

你的控制器动作就是这样。

[HttpPost("UploadFiles")] 
public async Task<IActionResult> Post(List<IFormFile> files) 
{ 
    long size = files.Sum(f => f.Length); 

    // full path to file in temp location 
    var filePath = Path.GetTempFileName(); 

    foreach (var formFile in files) 
    { 
     if (formFile.Length > 0) 
     { 
     using (var stream = new FileStream(filePath, FileMode.Create)) 
     { 
      await formFile.CopyToAsync(stream); 
     } 
     } 
    } 

    // process uploaded files 

    return Ok(new { count = files.Count, size, filePath}); 
} 

凡IFormFile具有这些特性

public interface IFormFile 
    { 
    string ContentType { get; } 
    string ContentDisposition { get; } 
    IHeaderDictionary Headers { get; } 
    long Length { get; } 
    string Name { get; } 
    string FileName { get; } 
    Stream OpenReadStream(); 
    void CopyTo(Stream target); 
    Task CopyToAsync(Stream target, CancellationToken cancellationToken = null); 
    } 

注:在关系数据库中存储二进制数据时一定要小心,因为它可以产生不利影响的表现。

这里阅读详细的文章 File Uploads

+0

我想通过viewmodel呢?不能让我的头靠近它。我已经成功地传递文件和表单数据使用参数,但我想发送json对象与文件。 THX – Aryan

+0

我创建了这两款车型 – Ahmar

+0

'公共班主任{ 公众诠释ID {获取;集;} 公共字符串名称{;设置;} } 公共类VM { 公共VM(){ 导师=新导师(); } 公共列表文件{得到;集;} 公共家教{得到;集;}} 为(VAR I = 0; I Ahmar