博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Angular2使用ng2-file-upload上传文件
阅读量:6688 次
发布时间:2019-06-25

本文共 9736 字,大约阅读时间需要 32 分钟。

hot3.png

html页面

1、上传文件的地址

引用的包

import { FileSelectDirective, FileDropDirective, FileUploader, FileUploaderOptions } from 'ng2-file-upload';public baseUrl = 'http://127.0.0.1:8080/test/';public uploadUrl=this.http.baseUrl+"test/upload";

 2、  //上传的方法

    public uploader: FileUploader = new FileUploader({        url: this.uploadUrl,        method: "POST",        itemAlias: "uploadok",        filters: [{            name: "", fn: (item): any => {                var numer = item.size                if (numer > 1048576) {                    //文件格式大小限制                    this.http.showAlert("提示", "请上传小于1M的文件", "确定", "", "", false);                    return false                }                //文件类型限制                var type = '|' + item.type.slice(item.type.lastIndexOf('/') + 1) + '|';                let temp = '|jpg|png|jpeg|bmp|gif|'.indexOf(type) !== -1;                if (!temp) {                    this.Flagyingyezhizhao = false                    this.http.showAlert("提示", "请上传格式为jpg、png、jpeg、bmp、gif的文件", "确定", "", "", false);                } else {                    this.Flagyingyezhizhao = true;                }                return temp;            }        }]    });

3、 //上传方法执行

 thiss.uploader.queue[this.uploader.queue.length - 1].onSuccess = function (response, status,    headers) {                // 上传文件成功                if (JSON.parse(response).stateCode== 200) {                    // 上传文件后获取服务器返回的数据                    let tempRes = JSON.parse(response);                    thiss.yyLicense=tempRes.data;                                          } else {                    // 上传文件后获取服务器返回的数据错误                    thiss.http.showAlert("提示", "组织代码证上传失败,请重新上传", "确定", "", "", false);                }            };  thiss.uploader.queue[this.uploader.queue.length - 1].upload(); // 开始上传//显示图片thiss.uploader.onAfterAddingFile = (fileItem) => {this.yyLicense = this.sanitizer.bypassSecurityTrustUrl((window.URL.createObjectURL(fileItem._file)));        }

4、//后台方法 

   @RequestMapping(method = RequestMethod.POST, value = "upload")    public Object UploadFile(MultipartHttpServletRequest requestFile) throws IllegalStateException, IOException {        DataState dataState = new DataState();        HttpServletRequest request = WebContext.getServletRequest();        UserEntity user = WebContext.getUserEntity();        Iterator
itr = requestFile.getFileNames();        requestFile.setCharacterEncoding("utf-8");        MultipartFile file = requestFile.getFile(itr.next());        // 转换成File        CommonsMultipartFile cf = (CommonsMultipartFile) file;        DiskFileItem fi = (DiskFileItem) cf.getFileItem();        File f = fi.getStoreLocation();        String fileName = file.getOriginalFilename();        System.out.println(fileName);        // 自定义的文件名称        String trueFileName = String.valueOf(System.currentTimeMillis()) + fileName;        String time = new SimpleDateFormat("yyyyMMdd").format(new Date());        // 设置存放图片文件的路径        String filePath="/app/test/"+time;        // String        path=realPath+System.getProperty("file.separator")+trueFileName;        System.out.println("存放图片文件的路径:" + filePath);        // 转存文件到指定的路径         file.transferTo(new File(path));        WebContext.getSession().setAttribute("url", url);        dataState.setStateCode(StateCode.OPT_OK);        dataState.setData(url);        return DataEvent.wrap("uploadok", dataState);    }

仅供参考

附上一个完整的文档

 

Angular2中有两个比较好用的上传文件的第三方库,一个是ng2-file-upload,一个是ng2-uploaderng2-uploader是一个轻便的上传文件的支持库,功能较弱,而ng2-file-upload是一个功能比较全面的上传文件的支持库。这里主要介绍一下ng2-file-upload的使用。

以下以Mac OS操作系统介绍。

1. 安装

使用npm安装即可。在项目中打开“终端”,运行命令:

sudo npm install ng2-file-upload --save

如果是以systemjs的方式打包,安装完成后需要打开systemjs.config.js文件,在System.configmap字段中的最后一行输入以下字段:

'ng2-file-upload':            'npm:ng2-file-upload'

System.configpackages字段中的最后一行输入:

'ng2-file-upload': {        main: 'index.js',        defaultExtension: 'js'}

之后便可以在项目中使用了。

2. 使用

在需要用到的模块中引用模块:

import { CommonModule }     from '@angular/common';import { FileUploadModule } from 'ng2-file-upload';

然后在@NgModuleimports字段中引用CommonModuleFileUploadModule

在对应需要使用的组件内引用:

import { FileUploader } from 'ng2-file-upload';

初始化FileUploader

uploader:FileUploader = new FileUploader({        url: "http://www.download.com:80/uploadFile",       method: "POST",        itemAlias: "uploadedfile"});

初始化FileUploader需要传入FileUploaderOptions类型的参数:

| 参数名 | 参数类型 | 是否是可选值 | 参数说明 |

|:---- --:|:--------:|:-------------:|:--------:|
| allowedMimeType | Array<string> | 可选值 | |
| allowedFileType | Array<string> | 可选值 | 允许上传的文件类型 |
| autoUpload | boolean | 可选值 | 是否自动上传 |
| isHTML5 | boolean | 可选值 | 是否是HTML5 |
| filters | Array<FilterFunction> | 可选值 | |
| headers | Array<Headers> | 可选值 | 上传文件的请求头参数 |
| method | string | 可选值 | 上传文件的方式 |
| authToken | string | 可选值 | auth验证的token |
| maxFileSize | number | 可选值 | 最大可上传文件的大小 |
| queueLimit | number | 可选值 | |
| removeAfterUpload | boolean | 可选值 | 是否在上传完成后从队列中移除 |
| url | string | 可选值 | 上传地址 |
| disableMultipart | boolean | 可选值 | |
| itemAlias | string | 可选值 | 文件标记/别名 |
| authTokenHeader | string | 可选值 | auth验证token的请求头 |

2.1 选择文件

在组件对应的HTML模版中设置input标签:

在组件.ts文件中设置声明函数:

selectedFileOnChanged() {    // 这里是文件选择完成后的操作处理}

选择文件默认支持选择单个文件,如需支持文件多选,请在标签中添加multiple属性,即:

2.2 拖拽文件

拖拽文件默认支持多文件拖拽。

对块级元素进行设置(这里以div标签为例):

在组件.ts文件中设置声明函数:

fileOverBase(event) {    // 拖拽状态改变的回调函数}fileDropOver(event) {    // 文件拖拽完成的回调函数}

2.3 文件上传

FileUploader有个数组类型的属性queue,里面是所有拖拽的和选择的文件,只要操作这个属性便可以进行文件上传。

this.uploader.queue[0].onSuccess = (response, status, headers) => {        // 上传文件成功       if (status == 200) {        // 上传文件后获取服务器返回的数据        let tempRes = JSON.parse(response);            }else {                    // 上传文件后获取服务器返回的数据错误            }};this.uploader.queue[0].upload(); // 开始上传

3. FileUploader详解

FileUploader是ng2-file-upload最主要的部件,里面包含了所有对文件的处理。

3.1 属性详解

  • isUploading:[boolean] 是否正在上传文件中。
  • queue:[array<FileItem>] 已经拖拽或选择的所有文件。
  • progress:[number] 所有的上传文件的整体进度。
  • options:[FileUploaderOptions] 上传文件的配置信息,前面已经介绍过。

3.2 方法详解

  • setOptions(options: FileUploaderOptions): void;
    设置上传文件的配置信息。
  • addToQueue(files: File[], options?: FileUploaderOptions, filters?: FilterFunction[] | string): void;
    手动添加文件到FileUploader的上传队列中。
  • removeFromQueue(value: FileItem): void;
    FileUploader的上传队列中移除指定文件。
  • clearQueue(): void;
    清除FileUploader上传队列中的所有文件。
  • uploadItem(value: FileItem): void;
    上传指定文件。
  • cancelItem(value: FileItem): void;
    取消指定文件的上传。
  • uploadAll(): void;
    上传FileUploader的上传队列中的所有文件。
  • cancelAll(): void;
    取消FileUploader的上传队列中的所有文件的上传。
  • isFile(value: any): boolean;
    判断是否是文件。
  • getIndexOfItem(value: any): number;
    获取文件在FileUploader上传队列中的位置。
  • getNotUploadedItems(): Array<any>;
    获取FileUploader上传队列中的所有未上传的文件。
  • getReadyItems(): Array<any>;
    获取FileUploader上传队列中的所有准备上传的文件。
  • destroy(): void;
    销毁FileUploader实例。

3.3 监听详解

  • onAfterAddingAll(fileItems: any): any;
    添加完所有文件之后的回调
    返回:
  • fileItems - 添加的文件的数组
  • onBuildItemForm(fileItem: FileItem, form: any): any;
    创建文件之后的回调
    返回:
  • fileItem - 创建的文件
  • form - 添加的方式
  • onAfterAddingFile(fileItem: FileItem): any;
    添加一个文件之后的回调
    返回:
  • fileItem - 添加的文件
  • onWhenAddingFileFailed(item: FileLikeObject, filter: any, options: any): any;
    添加文件失败的回调
    返回:
  • item -
  • filter -
  • options -
  • onBeforeUploadItem(fileItem: FileItem): any;
    要上传文件之前的回调
    返回:
  • fileItem - 将要上传的文件
  • onProgressItem(fileItem: FileItem, progress: any): any;
    上传文件的进度(开始上传后调用非常频繁)
    返回:
  • fileItem - 正在上传的文件
  • progress - 该文件的上传进度
  • onProgressAll(progress: any): any;
    整体的上传进度的回调(开始上传后调用非常频繁)
    返回:
  • progress - 整体的上传文件的进度
  • onSuccessItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any;
    上传一个文件成功的回调
    返回:
  • item - 上传成功的文件
  • response - 上传成功后服务器的返回
  • status - 状态码
  • headers - 上传成功后服务器的返回的返回头
  • onErrorItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any;
    上传一个文件错误的回调
    返回:
  • item - 上传错误的文件
  • response - 返回的错误
  • status - 状态码
  • headers - 返回的错误返回头
  • onCancelItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any;
    取消上传一个文件的回调
    返回:
  • item - 取消上传的文件
  • response - 取消的返回信息
  • status - 状态码
  • headers - 取消的返回信息的返回头
  • onCompleteItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any;
    完成上传一个文件的回调
    返回:
  • item - 上传成功的文件
  • response - 上传成功后服务器的返回
  • status - 状态码
  • headers - 上传成功后服务器的返回的返回头
  • onCompleteAll(): any;
    完成上传所有文件的回调

4. FileItem详解

FileItemFileUploaderqueue属性的元素类型,在FileUploader中存储的文件的基本类型。

4.1 属性详解

  • alias [string] : 上传的标志/别名。
  • url [string] : 地址。
  • method [string] : 上传的方法。
  • headers [any] : 上传的头部参数。
  • withCredentials: [boolean] : 是否使用证书。
  • formData [any] : 格式化数据?
  • isReady [boolean] : 是否准备上传(是否可以上传)。
  • isUploading [boolean] : 是否正在上传。
  • isUploaded [boolean] : 是否已经上传过。
  • isSuccess [boolean] : 是否上传成功。
  • isCancel [boolean] : 是否取消上传。
  • isError [boolean] : 是否上传错误。
  • progress [number] : 上传进度。
  • index [number] : 在队列中的位置。

4.2 方法详解

  • upload(): void;
    开始上传这个文件。
  • cancel(): void;
    取消上传这个文件。
  • remove(): void;
    将这个文件从上传队列中移除。

4.3 监听详解

  • onBeforeUpload(): void;
    开始上传之前的回调函数。
  • onBuildForm(form: any): any;
    创建文件的回调函数。
    返回:
  • form - 文件来源。
  • onProgress(progress: number): any;
    上传文件的进度回调函数。
    返回:
  • progress - 上传文件的进度。
  • onSuccess(response: string, status: number, headers: ParsedResponseHeaders): any;
    上传文件成功的回调函数。
    返回:
  • response - 成功后的回调数据
  • status - 状态码
  • headers - 回调数据的返回头
  • onError(response: string, status: number, headers: ParsedResponseHeaders): any;
    上传文件错误的回调函数。
  • onCancel(response: string, status: number, headers: ParsedResponseHeaders): any;
    取消上传的回调函数。
  • onComplete(response: string, status: number, headers: ParsedResponseHeaders): any;
    上传文件完成的回调函数。

 

转载于:https://my.oschina.net/maojindaoGG/blog/1613024

你可能感兴趣的文章
Java strictfp
查看>>
svg矢量图制作工具(Sketsa SVG Editor) v7.1.1 中文免费版
查看>>
WPF之托盘图标的设定
查看>>
HTTP协议详解(真的很经典)
查看>>
(转)什么是云计算
查看>>
新书推荐:细说PHP(含样章试读)
查看>>
shell常识总结
查看>>
大道至简,职场上做人做事做管理
查看>>
数据库隐式类型转换
查看>>
分享5个主流的HTML5开发工具
查看>>
基于Ionic2的开源项目
查看>>
周锦民:腾讯在线教育视频互动直播间技术实践
查看>>
[转]UML类图、关系及其JAVA代码
查看>>
PhotoShop算法原理解析系列 - 像素化---》碎片。
查看>>
设计模式之责任链模式
查看>>
php多态设计
查看>>
mvc伪静态<三> IIS配置
查看>>
android自定义radiobutton样式文字颜色随选中状态而改变
查看>>
【CodeForces 604B】F - 一般水的题1-More Cowbe
查看>>
wxPython 4.0.0b2安装
查看>>