Angular 文件上传、下载
1. 文件上传
本地可同时选择多个文件
将本地所选择的文件列出来
单个文件上传至服务器;
删除本地选择的文件
样式使用了bootstrap的样式
1. html - file.component.html
文件上传按钮
文件列表(文件名称、状态、操作 - 删除、上传)
<form class="form-horizontal" enctype="multipart/form-data">
<div class="form-group">
<label class="col-sm-2 control-label">选择文件</label>
<div class="col-sm-9">
<!-- 选择本地文件 - multiple="multiple"多选;accept=".xls,.doc,.pdf"限制条件;(change)="fileChange()"每次选择本地文件完成后触发的函数;-->
<input type="file" class="btn" multiple="multiple" (change)="fileChange()" accept=".xls,.doc,.pdf" #filesMulti style="padding-left:0; "/>
<!-- 本地文件列表 -->
<table *ngIf="fileData.length && fileData" class="table table-bordered table-striped wjccgl_table" id="file_name_contain" #fileNameContain>
<thead>
<tr>
<td>文件名</td>
<td>操作</td>
<td>状态</td>
</tr>
</thead>
<tbody>
<tr *ngFor="let item of fileData, let i = index">
<td>{{item.fileName}}</td>
<td>
<a href="javascript:;" (click)="fileDel(item.fileName)">删除</a>
</td>
<td>
<a href="javascript:;" (click)="fileUpload(item.file, i)">上传</a>
<span class="label label-default" *ngIf="item.status === '未上传'">未上传 </span>
<span class="label label-success" *ngIf="item.status === '已上传'">已上传 </span>
<span class="label label-error" *ngIf="item.status === '上传失败'">上传失败 </span>
</td>
</tr>
</tbody>
</table>
<!-- 提示信息 -->
<p class="help-block">* 目前只支持word/excel/pdf文件上传.</p>
</div>
</div></form>
2. ts - file.component.ts
记录本地文件数据方法
操作本地文件方法(删除本地文件、上传本地文件)
// 导入文件数据的模型文件
import {FileItemModel} from './file.model';
// 声明jquery,目的:在ts环境中可以使用js;
declare const $: any;
export class FileUpComponent implements {
// 定义文件数组
fileData: FileItemModel[] = [];
// 获取文件上传的inputHTML元素
@ViewChild('filesMulti') private fileMulti: ElementRef;
// 当选择本地文件后触发此方法
fileChange() {
// 获取选中的文件数组
const t_files = this.fileMulti.nativeElement.files;
const fileThis = this;
for ( let i = 0; i < t_files.length; i++) {
const fileItem: FileItemModel = new FileItemModel();
fileItem.fileName = files[i].name;
fileItem.file = files[i];
fileItem.status = '未上传';
fileThis.fileData.push(fileItem);
}
// 清空html中file的显示信息
$(this.fileMulti.nativeElement).val('');
}
// 删除选择的本地文件
fileDel(name: string) {
for (let i = 0; i < this.fileData.length; i++ ) {
if (this.fileData[i].fileName === name) {
this.fileData.splice(i, 1);
}
}
}}
// 单个文件上传
fileUpload(file, index) {
// 构造参数
const formData = new FormData();
formData.append('file', file, file.name);
// 上传至服务器
this.http.post('/file/upload', formData).subscribe((data: any) => {
if (respData.success && respData.errcode === 2000) { // 如果上传成功
// 此文件状态改为已上传
this.fileData[index].status = '已上传';
// 文件名称改为服务器返回的文件名
this.fileData[index].fileName = respData.data.fileName;
// 记录文件的ID
this.fileData[index].fileId = respData.data.fileId;
} else {
// 将此文件的文件状态改为‘上传失败’
this.fileData[index].status = '上传失败';
}
});
}
3. model - file.model.ts - 定义上传文件所需要的模型类
export class FileItemModel {
file: object;
fileId: string;
fileName: string;
status: string;
}
4. 预览结果;
未上传状态

选择本地文件

文件上传
前

后

2. 文件下载
1. html - file.component.html
<a href="javascript:;" (click)="fileDown(文件ID)">需要下载的文件名称</a>
2. ts - file.component.ts
export class FileComponent {
fileDown(fileId: string) { // 下载
window.location.href = `/file/download?fileId=${fileId}`;
}
}
Angular 文件上传、下载的更多相关文章
- Struts的文件上传下载
Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...
- Android okHttp网络请求之文件上传下载
前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...
- Selenium2学习-039-WebUI自动化实战实例-文件上传下载
通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...
- 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)
1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...
- 艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)
艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开元,作者是英国的,开发时间5年多,框架很稳定. 项 ...
- ssh框架文件上传下载
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SpringMVC——返回JSON数据&&文件上传下载
--------------------------------------------返回JSON数据------------------------------------------------ ...
- 【FTP】FTP文件上传下载-支持断点续传
Jar包:apache的commons-net包: 支持断点续传 支持进度监控(有时出不来,搞不清原因) 相关知识点 编码格式: UTF-8等; 文件类型: 包括[BINARY_FILE_TYPE(常 ...
- NetworkComms 文件上传下载和客户端自动升级(非开源)
演示程序下载地址:http://pan.baidu.com/s/1geVfmcr 淘宝地址:https://shop183793329.taobao.com 联系QQ号:3201175853 许可:购 ...
- SpringMVC文件上传下载
在Spring MVC的基础框架搭建起来后,我们测试了spring mvc中的返回值类型,如果你还没有搭建好springmvc的架构请参考博文->http://www.cnblogs.com/q ...
随机推荐
- spring-cloud-kubernetes的服务发现和轮询实战(含熔断)
本文是<spring-cloud-kubernetes实战系列>的第四篇,主要内容是在kubernetes上部署两个应用:Web-Service和Account-Service,通过spr ...
- 学生管理系统 Python语言
def show_student(): print(('*'*20).center(55)) print('1.添加学生信息'.center(50)) print('2.修改学生信息'.center( ...
- CodeForces 1107 - G Vasya and Maximum Profit 线段树
题目传送门 题解: 枚举 r 的位置. 线段树每个叶子节点存的是对应的位置到当前位置的价值. 每次往右边移动一个r的话,那么改变的信息有2个信息: 1. sum(a-ci) 2.gap(l, r) 对 ...
- CodeForces 758 D Ability To Convert
Ability To Convert 题意:给你一个n进制的60位的数,但是由于Alexander只会写0->9,所以他就会用10来表示十而不是A(假设进制>10); 题解:模拟就好了,先 ...
- stm32f10x基于freeRTOS的低功耗实现
0. 写在前面 没有太多时间更新,可能偶尔有时间就更新一些. 因为突然有项目用到了stm32f10x系列并且是电池驱动的,所以需要对功耗进行优化,其他CM3核心系列应该也同样适用. 1. 背景 Stm ...
- 解决hql无法使用mysql方法的问题——以date_add()为例
一.前言 最近在做一个定时任务,具体为定时清理掉mysql中存储的,一个月前的数据.而在hql语句中,就需要调用mysql的date_add()方法. 但是在hibernate中,是不允许使用各个SQ ...
- CSS3 04. 伸缩布局、设置主轴,侧轴方向、主/侧轴对齐方式、 伸缩比例、元素换行、换行控制、覆盖父元素的align-items;控制子元素顺序、web字体、突变字体
CSS3 在布局方面做了非常大的改进,对块级元素的布局排列变得十分灵活,适应性非常强,其强大的伸缩性,在响应式开发中可以发挥极大的作用.(兼容性不好) 必要元素: 指定一个盒子为伸缩盒子 displa ...
- Cookie与Seesion的作用
1.什么是Cookie与Session? cookie:首次访问服务器,服务器返回cookie置浏览器,存到用户电脑.之后去访问同一服务器,浏览器会携带相应cookie判断是否是同一浏览器的访问,告知 ...
- JavaScript漫谈之理解类型操作符typeof
在本文中,将简述JavaScript类型系统和数据类型,以及如何使用typeof操作符执行类型检查. 还讲解了使用typeof操作符进行某些数据类型检查是不完善的,并介绍其他几种类型检查的方法. 更多 ...
- 每天学会一点点(JAVA基础)
1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件. Java被设计成允 ...