代码之家  ›  专栏  ›  技术社区  ›  Scott-MEARN-Developer

FileReader()以角度返回未定义和伪路径

  •  0
  • Scott-MEARN-Developer  · 技术社区  · 3 年前

    我正在尝试创建一个表单,允许用户上传一个csv文件,然后我将使用JS操作该文件并返回一些对象数组。问题是上传部分。

    错误类型错误:无法读取未定义的属性(读取“0”)

    当我控制台。log()上传文件的路径名,我得到C:\fakepath\fileName.csv。使用vanilla JS时不会发生这种情况,所以我怀疑问题可能与此有关。

    home-page.component.html:

    <div class="container">
      <form #myForm id="myForm">
        <div class="row">
          <div class="col-10">
            <label for="csvFile">Select CSV File</label>
            <input class="form-control mb-3" type="file" accept=".csv" #csvFile />
          </div>
          <div class="col-2">
            <!-- <button (click)="myClickFunction($event)" class= "btn btn-secondary mt-4" type="submit" value="Submit">Upload</button> -->
            <input (click)="myClickFunction($event)" class="btn btn-secondary mt-4" type="submit" value="Upload" />
          </div>
        </div>
      </form>
    </div>

    主页.com组件.ts:

    import {Component, VERSION, ViewChild, ElementRef, OnInit} from "@angular/core";
    import { FormsModule, ReactiveFormsModule} from '@angular/forms';
    import {FormBuilder} from '@angular/forms';
    import { NgModule} from '@angular/core';
    
    @Component({
      selector: 'app-home-page',
      templateUrl: './home-page.component.html',
      styleUrls: ['./home-page.component.css']
    })
    export class HomePageComponent implements OnInit {
    
      constructor() {}
    
      ngOnInit(): void {}
    
      @ViewChild('csvFile') csvFile!: ElementRef;
      myClickFunction(event: any) {
        event.preventDefault()
        event.stopPropagation()
        console.log(this.csvFile.nativeElement.value);
    
        const input =this.csvFile.nativeElement.value.files[0];
        const reader = new FileReader();
    
        console.log("Form submitted " + input);
      }
    }

    正如我提到的,我怀疑问题可能是fakepath文件名,但我不能确定。我对Angular很陌生,所以非常感谢您的帮助!非常感谢。

    1 回复  |  直到 3 年前
        1
  •  1
  •   cvb    3 年前

    元素的.value属性是一个包含所选文件的路径/位置的字符串(出于安全原因,这表示为fakepath)。

    因此,该属性(值)没有称为“files”的字段或属性(即数组),因此您会看到错误。

    this.csvFile.nativeElement.files[0]