如何从Angular Reactive Form接收文件上传?

时间:2019-03-22 01:02:12

标签: c# asp.net .net-core angular7 angular-reactive-forms

我有模块以Angular 7反应形式上传文件(我需要反应形式,因为我需要一起上传文件和其他一些信息)

我关注这篇文章:https://medium.com/@amcdnl/file-uploads-with-angular-reactive-forms-960fd0b34cb5

代码如下:https://pastebin.com/qsbPiJEX

onFileChange(event) {
    const reader = new FileReader();

    if(event.target.files && event.target.files.length) {
      const [file] = event.target.files;
      reader.readAsDataURL(file);

      reader.onload = () => {
        this.formGroup.patchValue({
          file: reader.result
       });

        // need to run CD since file load runs outside of zone
        this.cd.markForCheck();
      };
    }
}

据我所知,我将在json数据中以文本形式接收文件。 但是我不知道如何将其作为文件接收或将json数据转换为文件。该文件可以是图片,pdf或其他文档(excel,文档或其他格式)

我正在使用Dotnet Core 2.2和Angular 7 知道如何接收文件吗?

2 个答案:

答案 0 :(得分:1)

我有一个要通过formData发布图像的表单,仅通过放置此属性<div class="container"> <div class="row"> <div class="col-md-4"> </div> <div class="col-md-4"> //insert your div code to center <form> <div class="form-group row"> <label for="staticEmail" class="col-sm-2 col-form-label">Email</label> <div class="col-sm-10"> <input type="text" readonly class="form-control-plaintext" id="staticEmail" value="email@example.com"> </div> </div> <div class="form-group row"> <label for="inputPassword" class="col-sm-2 col-form- label">Password</label> <div class="col-sm-10"> <input type="password" class="form-control" id="inputPassword" placeholder="Password"> </div> </div> </form> <!-- a bootstrap col has 12 that's why am divide col by 4 to center 4+4+4 = 12 --> </div> <div class="col-md-4"> </div> </div> </div> 就可以在FormControl中获得文件对象。这可以将FormControl中的FileList对象作为值写入。为此,您需要安装'@ rxweb / reactive-form-validators'软件包并注册'RxReactiveFormsModule'模块。就是这样。

这是我的html代码:

writeFile="true"

请参考以下示例:Stackblitz

答案 1 :(得分:0)

我们正在请求的请求正文中发送文件,因此我们可以使用以下代码在请求中获取文件。因此我们可以使用以下代码访问请求中的文件

using System.IO;  
var filelocation = Path.GetTempFileName();
foreach (var FileData in Request.Form.Files)  
{ 
 if (FileData.Length > 0)  
  {  
    using (var inputStream = new FileStream(filelocation , FileMode.Create))  
    { 

          // read file to stream  
            await FileData.CopyToAsync(inputStream);  
             // stream to byte array  
              byte[] array = new byte[inputStream.Length];  
               inputStream.Seek(0, SeekOrigin.Begin);  

                inputStream.Read(array, 0, array.Length);  
     // get file name  
     string fName = formFile.FileName;  
  }  

}
}