Angular 7:如何将文件/图像与我的反应式表单一起提交?

2024-02-11

我创建了带有文本输入的简单反应式表单,当提交表单时,我想传递文件输入中的图像。每次我用谷歌搜索时,我都会得到教程,它们向我展示如何上传文件,但它是在没有其他输入字段的情况下完成的。我知道如何做到这一点,但我不明白如何在一次提交中提交表单和文件输入。

在我的场景中,我是否不应该使用反应式表单,而应该使用简单的表单new FormData()并将每个输入附加到其中?

如果我能做到这一点,请给我留下简单的例子。

edit: 如何在 Angular2 响应式表单中包含文件上传控件? https://stackoverflow.com/questions/43444440/how-to-include-a-file-upload-control-in-an-angular2-reactive-form这不是答案。回答市场没有随反应形式发布文件,它是单独的发布文件。


也有这个问题,我所做的是构造一个 FormData,使用循环将 formGroup 值添加到表单 Data

import {
  Component,
  OnInit,
  ChangeDetectorRef
} from '@angular/core';
import {
  FormGroup,
  FormBuilder,
  Validators
} from '@angular/forms';


export class TodoFormComponent {
  todoForm: FormGroup = this.fb.group({
    todo: ['', Validators.required],
    image: ['', Validators.required], //making the image required here
    done: [false]
  })

  constructor(
    private fb: FormBuilder,
    private cd: ChangeDetectorRef
  ) {}

  /**
   *@param event {EventObject} - the javascript change event
   *@param field {String} - the form field control name
   */
  onFileChange(event, field) {
    if (event.target.files && event.target.files.length) {
      const [file] = event.target.files;
      // just checking if it is an image, ignore if you want
      if (!file.type.startsWith('image')) {
        this.todoForm.get(field).setErrors({
          required: true
        });
        this.cd.markForCheck();
      } else {
        // unlike most tutorials, i am using the actual Blob/file object instead of the data-url
        this.todoForm.patchValue({
          [field]: file
        });
        // need to run CD since file load runs outside of zone
        this.cd.markForCheck();
      }
    }

    onSubmit() {
      const formData = new FormData();
      Object.entries(this.todoForm.value).forEach(
        ([key, value]: any[]) => {
          formData.set(key, value);
        }

        //submit the form using formData
        // if you are using nodejs use something like multer
      )
    }

  }
<form [formGroup]="todoForm" (ngSubmit)="onSubmit()">
  <input type="file" formControlName="image" (onchange)="onFileChange($event, 'image')"/>
  <textarea formControlName="todo"></textarea>
  <button type="submit">Submit</button>
</form>

在服务器端,您可以像处理表单数据请求一样处理请求

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 7:如何将文件/图像与我的反应式表单一起提交? 的相关文章

随机推荐

  • 获取 cp 无法创建常规文件 openssl 中没有这样的文件或目录

    尝试编译 openssl 代码时出现以下错误 在 make install 步骤中出现以下错误 如果有人解决了这个问题 请告诉我 谷歌搜索有链接 但指向一个未解决的问题 making install in crypto make 1 Ent
  • WCF 服务会公开属性吗?

    在实现 WCF 服务所需的接口中 我使用以下语句声明主类 ServiceContract 属性和任何公开的方法 OperationContract 我如何公开公共财产 谢谢 自从get属性的一部分是一种方法 这在技术上是可行的 但是 正如前
  • 如何通过外部 adb 命令判断 Android 活动是否已完成?

    在我们的测试中 我想使用脚本来运行一些 Android 活动 我可以使用 adb shell start Activity 命令来启动这些活动 有没有办法使用 adb 命令来判断活动何时完成 在发出下一个 adb start Activit
  • Weka 仅将数字更改为名义

    我有一个 CSV 文件 正在导入 Weka 所有变量均以数字形式导入 我需要将其中 3 个更改为名义值 然而 当我在其上放置数字滤波器时 所有变量都会发生变化 我只想改3 1 有没有办法通过过滤器改变一些 2 或者您可以在导入时设置它 如果
  • Android Studio 2.3 sdk 管理器选项卡呈灰色

    Android Studio 2 3 gt 配置 gt SDK 管理器 这些选项卡呈灰色 SDK 工具 SDK 更新站点 此外 显示包详细信息 复选框呈灰色 系统更新正常 没有错误消息 我认为这在 Studio 2 2 的某个时刻发生过 但
  • 编译项目时出错

    每次我尝试编译程序时都会收到此错误 一些项目功能 例如失败的完整解决方案分析 项目和依赖它的项目已被禁用 XamlCTask 任务不支持 DebugType 参数 验证任务中是否存在该参数 并且该参数是可设置的公共参数 实例属性 无法使用其
  • 如何在 fastapi 中使用刷新令牌?

    我试图找到一个使用的例子刷新令牌 https auth0 com blog refresh tokens what are they and when to use them 在 fastapi 中 快速APIdocs https fast
  • Java 8 lambda 语法中大括号何时是可选的?

    我意识到 Java 8 lambda 实现可能会发生变化 但在 lambda build b39 中 我发现只有当 lambda 表达式返回非 void 类型时才能省略大括号 例如 这样编译 public class Collections
  • MySQL Workbench 是否自动为外键创建索引?

    当我在 MySQL 工作台中创建外键时 索引 选项卡上会出现一个新条目 其与我刚刚创建的外键完全相同 这实际上是外键 由于某种原因显示在 索引 选项卡上吗 或者 MySQL Workbench 是否会尝试为我提供帮助并为我创建一个索引 知道
  • 在 DOM 元素上创建角度范围

    我需要创建一个新的角度范围并将其附加到 DOM 元素 我正在修改第三方控件 因此我无法选择仅使用指令 我需要做类似的事情 thirdPartyCallbackfunction domElement var myNewScope scope
  • segue完成后如何执行一些代码?

    iOS 6 是否可以知道何时UIStoryboardSegue已经完成转变了吗 就像我添加一个UIStoryboardSegue from UIButton推另一个UIViewController在导航控制器上 我想在推送转换完成后立即执行
  • 当没有文件要处理时,如何防止在SSIS包中导入Excel?

    我有一个导入 Excel 文件的 SSIS 包 在包内 我有一个脚本任务 用于在执行 Excel 导入过程之前检查 Excel 文件是否存在 当 Excel 文件不存在时 我无法执行包 因为AcquireConnection error 当
  • SQL Server 中的用户定义数据类型有多酷? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 SQL Server 中的用户定义数据类型是中级 SQL 用户应该了解和使用的吗 使用 UDT 的优点和缺点是什么 我的建议是永远不要使用它们
  • 为什么 RestKit 改变我的响应内容类型?

    简而言之 我尝试使用以下命令从服务器获取数据content typehttp请求头设置为 text html 但由于某种原因 RestKit 将其更改为application JSON 解释 如果我只使用AF网络 https github
  • 从领域数据库中获取单个列 (Android)

    我是领域的初学者 我有一个包含 3 列的表 其名称为ID 姓名 电子邮件 地址 为了获取 Name 列的数据 我们使用如下查询 从表名中选择名称 对于 SQLite 如果我们在Android中使用Realm 那么我们必须使用哪种方法来只获取
  • jinja2 如何删除尾随换行符

    我正在使用 jinja 2 输出 yaml 文件 但似乎无法摆脱尾随换行符和 for 循环的末尾 例如下面的 request path path headers origin somedomain com user agent agent
  • 解雇ViewController:不工作

    我有一个名为 vc0 的视图控制器 其显示如下 self presentViewController vc1 animated YES completion nil 在 vc1 中 我有一个按钮来呈现另一个视图控制器 self presen
  • 获取 Java 数组部分的视图[重复]

    这个问题在这里已经有答案了 我指的是在Java中只获取数组的一部分 https stackoverflow com questions 11001720 get only part of an array in java 它使用范围复制 方
  • set_time_limit 不起作用

    我有一个bigintphp 中的类 用于计算大数 除了时间限制外 效果很好 我设置了时间限制 set time limit 900 在我的 bigint php 文件中 它在本地主机中工作 但在我的网络主机中 当我尝试计算 999 999
  • Angular 7:如何将文件/图像与我的反应式表单一起提交?

    我创建了带有文本输入的简单反应式表单 当提交表单时 我想传递文件输入中的图像 每次我用谷歌搜索时 我都会得到教程 它们向我展示如何上传文件 但它是在没有其他输入字段的情况下完成的 我知道如何做到这一点 但我不明白如何在一次提交中提交表单和文