Angular 11如何解析文件上传到javascript对象

Posted

技术标签:

【中文标题】Angular 11如何解析文件上传到javascript对象【英文标题】:Angular 11 how to parse file upload to a javascript object 【发布时间】:2022-01-17 21:43:28 【问题描述】:

我想选择一个 json 文件并将其解析为一个对象,然后再将其发送到 api 调用进行验证。下面的代码无法发送 formData。 api 需要一个对象。

<label class="form-label required" for="file">File</label>
<label
    class="button secondary wide required"
    for="file"
    (click)="inputFileTarget.click()"
>
    Select JSON file
</label>
<input
    id="inputFileTarget"
    #inputFileTarget
    type="file"
    class="hidden"
    accept=".json"
    formControlName="fileInput"
    (change)="onFileChange($event)"
/>

组件:

    const formData = new FormData();
    formData.append('file', this.importForm.get('fileSource').value);
    this.wizard.next();
    this.validateUploadedTemplate(formData);

private validateUploadedTemplate(formData: any): void 
    this.templateUploadService.validate(formData)
    .subscribe(result => 
        console.log('result', result);
    )




[HttpPost]
    [ResponseType(typeof(Boolean))]
    [Route("validate-definition", Name = "ValidateAuditTemplate")]
    [RequiredActivity(RadarModuleKeys.EnhancedAudits, EnhancedAuditActivities.ManageEnhancedAudits)]
    public async Task<IHttpActionResult> ValidateAuditTemplate(TemplateDefinition template)
    


        return Ok(await Task.FromResult(true));
    

【问题讨论】:

【参考方案1】:

您不能像那样“读取”文件。 this.importForm.get('fileSource').value 将返回一个 FileList

interface FileList 
    readonly length: number;
    item(index: number): File | null;
    [index: number]: File;

即使您设置了&lt;input multiple="false" /&gt;,您也会得到一个只有一项的 FileList。

如果您只想要一个项目,则从 FileList 中获取第一个项目并使用 FileReader 读取内容。

这是一个解释它的答案: Read a file and parse its content

【讨论】:

以上是关于Angular 11如何解析文件上传到javascript对象的主要内容,如果未能解决你的问题,请参考以下文章

使用 Angular 和 php 选择文件、裁剪和上传

如何使用angular-file-upload(nervgh / angular-file-upload)重新上传同一个文件两次

处理响应创建excel文件时解析URL时出现错误HTTP失败

如何在 Angular 6 中上传之前验证文件

Angularjs如何上传多部分表单数据和文件?

如何在Angular2中上传文件