千家信息网

怎么在Angular中实现文件上传

发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,本篇内容介绍了"怎么在Angular中实现文件上传"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么
千家信息网最后更新 2024年09月23日怎么在Angular中实现文件上传

本篇内容介绍了"怎么在Angular中实现文件上传"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

什么是角?

Angular 是一个开发平台和框架,您可以使用它在 JavaScript (JS) 或 TypeScript (TS) 中创建单页应用程序。该框架是用 TS 编写的,并通过您可以导入到您的项目中的库来实现。

Angular 的基本结构基于 NgModules,即组织成功能集的组件集合。这些模块使您能够定义 Angular 应用程序并集成各种组件。您在 Angular 中创建的每个应用程序都有一个根模块,它支持引导,以及您需要的任何功能模块。

每个模块内都有组件。这些组件定义了可在您的应用程序中使用的视图。视图是可以应用代码的一组屏幕元素。此外,组件包括服务。服务是提供功能并使您能够创建高效模块化应用程序的类。

当您使用组件和内部服务时,您依赖于元数据来定义类型和用法。元数据将组件与视图模板相关联,将 HTML 与 Angular 指令和标记相结合。这使您可以在渲染之前修改 HTML。元数据也是 Angular 通过依赖注入提供服务的方式。

用于文件上传的 Angular 组件

在 Angular 中,您可以使用多个组件来手动实现文件上传。根据您希望如何使用上传,您可能需要修改您对这些方法的使用,或者您可以简单地采用预先构建的文件上传方法。例如,如果您使用的是数字资产管理工具,许多解决方案都提供了您可以轻松添加的方法。

以下是使用 Angular 完成文件上传的常用元素。

表单数据

FormData 是一个可以用来存储键值对的对象。它使您能够构建与 HTML 表单对齐的对象。此功能允许您通过 HTTP 客户端库或 XMLHttpRequest 接口将数据(例如文件上传)发送到 REST API 端点。

要创建 FormData 对象,您可以使用以下内容:

Java:

const  formData  =  new  FormData ();

此方法使您能够直接添加键值或从现有的 HTML 表单中收集数据。

HttpClient 模块

HttpClientModule 是一个包含 API 的模块,您可以使用它从 HTTP 服务器发送和获取应用程序的数据。它基于 XMLHttpRequest 接口。它包含使您能够避免提取 JSON 数据、使用拦截器修改请求标头以及将拦截器添加到提供程序标头的功能。

您可以通过将以下内容添加到 JSON 包文件中来导入此模块:

java:

import {HttpClientModule} from '@angular/common/http';

反应形式

反应式表单使您能够使用模型驱动的方法来处理具有变化值的表单输入。使用这些表单,您可以在表单组中使用多个控件、验证表单值以及构建可以动态修改控件的表单。这是可能的,因为表单数据是作为不可变的、可观察的流返回的,而不是像模板驱动的表单那样的可变数据点。

您可以使用以下命令导入此模块:

Java:

import {ReactiveFormsModule} from '@angular/forms';@NgModule({  imports: [    // other imports ...    ReactiveFormsModule  ],})export class AppModule { }

如何在 Angular 9 中实现文件上传:快速教程

如果您准备尝试使用 Angular 应用程序实现文件上传,您可以尝试以下使用 FormData 和 HttpClientModule 的教程。本教程改编自Ahmed Bouchefra的较长教程。

要开始学习本教程,您需要具备以下条件:

  • 文件共享服务,如 file.io 或 Dropbox

  • Node.js 8.9+ 和 npm 5.5.1+ 的开发环境

  • 角 CLI您可以在系统 CLI 中使用 npm install -g @angular/cli 全局安装它

1. 创建新应用并启动开发服务器

首先,您需要先创建一个应用程序来处理上传。您可以通过在终端中输入以下内容来创建新应用程序:

java:

ng new {Application name}

创建这个时,你需要指定是否添加 Angular 路由(是)和你的样式表格式(CSS)。

接下来,您需要从终端启动本地开发服务器:

java:

cd {Application name}ng serve

这将启动一个服务器并返回本地主机地址。在浏览器中打开返回的站点以查看您的应用程序。

2.设置HttpClientModule

通过 Angular CLI 初始化您的项目并导入 HttpClientModule。为此,您需要打开 src/app/app.module.ts 文件。您可以使用以下方法执行此操作:

java:

import {BrowserModule} from '@angular/platform-browser';import {NgModule} from '@angular/core';import {AppRoutingModule} from './app-routing.module';import {AppComponent} from './app.component';import {HttpClientModule} from '@angular/common/http';@NgModule({  declarations: [    AppComponent,  ],  imports: [    BrowserModule,    AppRoutingModule,    HttpClientModule  ],  providers: [],  bootstrap: [AppComponent]})export class AppModule { }

3. 添加控制组件和用户界面

要添加UI 控件组件,您需要创建一个 home 和 about 组件。您可以使用以下命令在终端中添加这些:

java:

cd ~/angular-upload-exampleng generate component homeng generate component about

要完成 UI,您可以手动创建组件或使用其他模块,如 Angular Material。无论您选择哪种方法,您至少需要定义您的 uploadFile() 方法并为您的用户提供按钮或提交方法。

然后,您需要通过以下方式将组件添加到路由器:src/app/app-routing.module.ts 文件。

java:

import {NgModule} from '@angular/core';import {Routes, RouterModule} from '@angular/router';import {HomeComponent} from './home/home.component';import {AboutComponent} from './about/about.component';const routes: Routes = [  {path: '', redirectTo: 'home', pathMatch: 'full'},  {path: 'home', component: HomeComponent},  {path: 'about', component: AboutComponent},];@NgModule({  imports: [RouterModule.forRoot(routes)],  exports: [RouterModule]})export class AppRoutingModule { }

4. 创建您的上传服务

首先,您需要使用以下内容创建您的服务:

Java:

ng generate service upload

在 src/app/upload.service.ts 文件中,添加您的导入并注入您的 HTTP 客户端:

java:

import {HttpClient, HttpEvent, HttpErrorResponse, HttpEventType} from '@angular/common/http';@Injectable({  providedIn: 'root'})export class UploadService {     SERVER_URL: string = "{Server URL}";    constructor(private httpClient: HttpClient) { }

您还需要添加您的上传方法,该方法允许您调用 post 方法并将数据发送到您的上传服务器。

java:

public upload(formData) {    return this.httpClient.post(this.SERVER_URL, formData, {      reportProgress: true,      observe: 'events'    });}

5. 定义你的上传方法

创建服务后,您需要定义上传方法并添加错误处理。如果您愿意,您还可以在此处添加进度条元素并更改 UI 样式。

在 src/app/home/home.component.ts 文件中,添加您的导入。

java:

import {Component, OnInit, ViewChild, ElementRef} from '@angular/core';import {HttpEventType, HttpErrorResponse} from '@angular/common/http';import {of} from 'rxjs';import {catchError, map} from 'rxjs/operators';import {UploadService} from '../upload.service';@Component({  selector: 'app-home',  templateUrl: './home.component.html',  styleUrls: ['./home.component.css']})  export class HomeComponent implements OnInit {    @ViewChild("fileUpload", {static: false}) fileUpload: ElementRef;files = [];    constructor(private uploadService: UploadService) { }

现在您可以定义您的方法和变量,并注入您的上传服务。

java:

uploadFile(file) {    const formData = new FormData();      formData.append('file', file.data);      file.inProgress = true;    this.uploadService.upload(formData).pipe(      map(event => {        switch (event.type) {          case HttpEventType.UploadProgress:            file.progress = Math.round(event.loaded * 100 / event.total);            break;          case HttpEventType.Response:            return event;        }        }),        catchError((error: HttpErrorResponse) => {        file.inProgress = false;        return of(`Upload failed: ${file.data.name}`);      })).subscribe((event: any) => {        if (typeof (event) === 'object') {          console.log(event.body);        }        });    }

为了让用户能够提交文件,您还应该定义一个与提交按钮相关联的 onClick() 方法。

java:

onClick() {    const fileUpload = this.fileUpload.nativeElement;fileUpload.onchange = () => {    for (let index = 0; index < fileUpload.files.length; index++)    {     const file = fileUpload.files[index];     this.files.push({ data: file, inProgress: false, progress: 0});    }      this.uploadFiles();    };    fileUpload.click();}

您现在可以通过本地浏览器测试您的应用程序,以确保它按预期运行。

"怎么在Angular中实现文件上传"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

文件 方法 服务 组件 应用 程序 应用程序 表单 数据 模块 内容 功能 教程 服务器 开发 中实 元素 可以使 可以通过 对象 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 计算机网络技术系学那些专业 办公室工作网络安全 退休网络安全事项 杨浦区网络技术服务咨询哪个好 服务器端口与服务的关系 美国网络安全审查制度研究 魔兽世界70级独立服务器 无锡靠谱的软件开发 虚拟主机对异地服务器有影响吗 管家婆能用附加数据库实现还原吗 计算机网络技术是啥意思 软件开发步骤包括哪些 网络安全中的边界安全 期货软件开发规定 人渣服务器建家 镇江企业软件开发管理 网络安全毕业论文报告范文 电子烟软件开发 sdh是否是有线传输网络技术 软件开发需要什么内存 淄博销售采购生产软件开发报价 计算机网络安全的故障类型 成都魁拔网络技术 无锡靠谱的软件开发 无法保存打印机没有启动服务器 原神非官方服务器有活动吗 德州软件开发方案 风险漏洞台帐网络安全 pc端授课软件开发 公司网络安全部是干嘛的
0