`
裴小星
  • 浏览: 265007 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
8ccf5db2-0d60-335f-a337-3c30d2feabdb
Java NIO翻译
浏览量:27804
F3e939f0-dc16-3d6e-8c0b-3315c810fb91
PureJS开发过程详解
浏览量:74015
07a6d496-dc19-3c71-92cf-92edb5203cef
MongoDB Java ...
浏览量:62903
社区版块
存档分类
最新评论

Pure JS (3.2): 上传下载 (HTML5 与 Flash 上传实现,配置项说明)

阅读更多
Pure JS (3.2): 上传下载 (HTML5 与 Flash 上传实现,配置项说明)


  接着上一篇文章的话题,本文主要讲解 HTML5 方式的上传,FLash 方式上传客户端的实现,并说明 pure.upload 组件的配置项。
  服务器端的实现在上一篇文章已经说明过了,这里就不再重复了。

HTML5 方式上传




  HTML5方式上传,实际上是解决将文件数据放在请求的 body 中,而不使用 mutipart/form-data 格式进行封装。

  实现思路如下:
  1. 创建 XMLHttpRequest 对象
  2. 配置上传进程中的回调函数
  3. 配置上传完成时的回调函数
  4. 开始上传

  具体实现如下:
			upload: function(id, params){
				// 根据 id 获取文件
				var file = files[id], name = file.name,size = file.size;

				// 创建 XMLHttpRequest
				xhrs[id] = new XMLHttpRequest();

				// 配置上传进程中的回调函数
				xhrs[id].upload.onprogress = function(e){
					if (e.lengthComputable){
						onUploadProgress(id, name, e.loaded, e.total)
					}
				};

				//  配置上传完成时的回调函数
				xhrs[id].onreadystatechange = function(){			
					if (xhrs[id].readyState == 4){
						if (!files[id]) return;
						onUploadProgress(id, name, size, size);
						var response = $.parseJSON(xhrs[id].responseText);
						onUploadComplete({id:id, name: name, size:size}, response);
						delete files[id];
						delete xhrs[id];	   
					}
				};

				// 设置上传参数,并生成上传 URL
				params.Filedata = name;
				var action = options.action + '?' + $.param(params);

				// 开始上传
				xhrs[id].open('POST', action, true);
				xhrs[id].setRequestHeader('X-Requested-With', 'XMLHttpRequest');
				xhrs[id].setRequestHeader('Content-Type', 'application/octet-stream');
				xhrs[id].send(file);
			}


Flash 方式上传




  Flash 方式上传需要结合使用 ActionScript 和 JavaScript,利用 ActionScript 的 ExternalInterfate 进行交互。

  ActionScript 部分的实现思路如下:
  1. 遍历从文件选择对话框中选取的文件
  2. 配置上传进程中的回调函数
  3. 配置上传完成时的回调函数
  4. 利用获得的 FileReference 的 upload 方法进行上传。

  具体实现如下:
		private function upload(files:Array):void {
			// 遍历从文件选择对话框中选取的文件
			eachFile(function(file:FileReference, i:Number):void {
				var id:Number = files[i].id;
				uploadingFiles[id] = file;

				// 配置上传进程中的回调函数
				file.addEventListener(ProgressEvent.PROGRESS, function(e:ProgressEvent):void {
					call("onProgress", { id: id, loaded: e.bytesLoaded, total: e.bytesTotal });
				});

				// 配置上传完成时的回调函数
				file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, function(e:DataEvent):void {
					delete uploadingFiles[id];
					call("onComplete", { file: files[i], result: e.data } );
				});

				// 利用获得的 FileReference 的 upload 方法进行上传
				file.upload(new URLRequest(params.url));
			});
		}

  JavaScript 部分需要将注册到 Flash 的函数调用映射到不同上传方式共用的函数。

  具体实现如下:
			callbacks: {
				// Other codes ...

				// 将上传进程回调函数映射到 onUploadProgress(...)
				onProgress: function(o) {
					onUploadProgress(o.id, null, o.loaded, o.total);
				},

				// 将上传完成时的回调函数映射到 onUploadComplete(...)
				onComplete: function(o) {					
				   	onUploadComplete(o.file, $.parseJSON(o.result));
				   	delete sizeArray[o.file.id];
				}			
			}

配置项


  上一遍文章中已经提到了 pure.upload 用法:
pure.upload({  
    element: $uploader[0],  
    action: 'api',  
    params: { action: 'upload' },  
    sizeLimit: 1000 * 1024 * 1024,  
    onComplete: function(file, data){  
        // Do more after upload complete ...   
    }  
});

  这里传给 upload 的 object 的属性就是配置项了。


  【基本配置项】
  element: 上传组件的容器,可以是 div 或 span
  action: 上传 URL
  params: object,表示发送到服务器端的额外参数
  sizeLimit: 上传总大小限制
  template: HTML 片段,作为上传组件的模板,其中 {tip} 表示提示信息
  fileTemplate: HTML 片段,作为正在上传的文件条目的模板

  【回调函数】
  allowedExtensions: 表示允许的扩展名
  onSubmit(id, fileName): 开始上传的回调函数
  onComplete(file, data): 上传完成时的回调函数
  showMessage: 显示信息的方式,默认为 alert(message)


  【消息配置】

  用 messages 属性(object类型)进行消息配置。
  可配置的消息包括:

  typeError: 文件类型错误,默认为 '{file} has invalid extension. Only {extensions} are allowed.'
  sizeError: 文件大小错误,默认为 'Total size is too large, maximum size is {sizeLimit}.'
  emptyError: 文件为空时的错误,默认为 '{file} is empty, please select files again without it.'
  onLeave: 文件正在上传时离开页面的提示,默认为 'The files are being uploaded, if you leave now the upload will be cancelled.'
  sizeTip: 文件大小限制提示信息,默认为  'Maximum total size is {sizeLimit}. '
  ddTip: 拖拽支持提示,默认为 'Drag and Drop is Supported.'



  【CSS Class 配置】

  用 classes 属性(object类型) 配置上传组件对应的各部件的 CSS Class。

  button: 上传按钮,默认为 'pure-upload-button'
  drop: 拖拽区域,默认为 'pure-upload-drop-area'
  dropActive: 鼠标滑入时的拖拽区域,默认为 'pure-upload-drop-area-active'
  list: 上传中的文件列表,默认为 'pure-upload-list'
  file: 上传中的文件名称,默认为 'pure-upload-file'
  spinner: 上传中的文件的进度条,默认为 'pure-upload-spinner'
  size: 上传中的文件大小,默认为 'pure-upload-size'
  cancel: 取消上传的链接,默认为 'pure-upload-cancel'
  buttonFocus: 焦点位于上传按钮时的样式,默认为 'pure-upload-button-focus'
  buttonHover: 鼠标滑过上传按钮时的样式,默认为 'pure-upload-button-hover'


  【Flash 属性配置】

  用 flashSettings 属性(object类型) 配置 flash 上传按钮

  swfPath: swf 文件路径,默认为 'swf/pure.upload.swf',
  url: 上传 url,默认为 options.action + '?' + $.param(options.params),
  image: flash 按钮图片路径,默认为 'images/pure.upload.png',
  width: 按钮宽度,默认为 107
  height: 按钮高度,默认为 31
  text: 文字,默认为 'Upload a file',
  textStyle: 文字样式,默认为 'font-family: Arial; font-size: 12px',
  textTop: 文字上方开始位置,默认为 6
  textLeft: 文字左边开始位置,默认为 17

  【返回对象支持的方法】

  通过pure.upload(...)方法返回的对象支持以下方法:

  reset():  重置uploader
  uploading(): 检查是否有文件还在上传中
3
1
分享到:
评论

相关推荐

    Pure JS (3.1):上传下载(利用 HTML5 与 Flash)

    **文件名称解析:** "PureJS"和"Flash"这两个文件名可能是文章中的两个主要部分,分别展示了使用纯JavaScript实现上传下载的示例代码和使用Flash的解决方案。 **详细内容概览:** 1. **HTML5 File API**:HTML5...

    PureJS (6.5):配置文件

    标题中的“PureJS (6.5):配置文件”指的是一个关于JavaScript的教程或讨论,特别是聚焦在如何配置JavaScript项目中的文件。PureJS可能是一个强调使用原生JavaScript代码的库或者框架,而不是依赖其他库如jQuery。...

    Pure JS (4.3): pure.db.js 的实现(基于 MongoDB Rhino Driver)

    《纯JavaScript实现:pure.db.js基于MongoDB Rhino Driver详解》 在JavaScript的世界里,数据库操作通常依赖于服务器端的语言支持,如PHP、Python或Node.js等。然而,有一种另辟蹊径的方式,即通过Rhino JavaScript...

    html5文件上传插件Pure HTML5 file upload

    要使用Pure HTML5 file upload插件,你需要在HTML中引入相关的JavaScript和CSS文件,然后按照插件的文档配置参数,如设置上传URL、设定文件类型限制等。在JavaScript中,你可以监听`change`事件来触发文件上传,或者...

    PureJS (6.6):配置 Spket 智能感知

    本篇将详细介绍如何配置Spket以实现对PureJS(一种轻量级的JavaScript库)的智能支持。 首先,我们需要下载并安装Spket IDE。访问其官方网站或者通过GitHub等渠道获取最新版本。安装完成后,打开Spket IDE并创建一...

    gostack_3.2:[GoStack] 3.2 Fundamentos React Native

    【GoStack 3.2 基础课程:React Native详解】 React Native是Facebook推出的一款开源框架,它允许开发者使用JavaScript和React构建原生移动应用。在“gostack_3.2:[GoStack] 3.2 Fundamentos React Native”这个...

    Pure JS (7):小结

    标题中的“Pure JS (7):小结”表明这是一篇关于JavaScript编程的系列教程的第七部分,重点在于总结前面几部分所讲解的核心概念和技巧。JavaScript,也称为JS,是一种广泛用于网页和网络应用的脚本语言,尤其在前端...

    Pure JS (6.2):结合 Rhino 和 Junit GUI 测试 JS

    标题 "Pure JS (6.2):结合 Rhino 和 Junit GUI 测试 JS" 提到的是一个关于使用纯JavaScript(Pure JS)与Rhino JavaScript引擎以及JUnit进行图形用户界面(GUI)测试的实践方法。Rhino是Mozilla基金会开发的一个...

    Pure JS (5.1):在服务器端使用 JQuery DOM 和 JQuery Template

    标题 "Pure JS (5.1):在服务器端使用 JQuery DOM 和 JQuery Template" 暗示了这篇博客可能探讨如何在非浏览器环境,比如服务器端,利用JavaScript的JQuery库来处理DOM操作和模板渲染。虽然JQuery通常与前端开发关联...

    purejs:用于构造函数、mixin 和类型测试的纯 JavaScript API

    Pure.js 坚持 JavaScript 的原型性质,没有引入新的想法,允许与内置构造函数更好地集成。安装 npm install purejs或者使用凉亭 bower install purejs鲍尔要使用该组件,您必须使用类的工具捆绑该组件。 例如: ./...

    Pure JS (1): 在 jetty 上运行 JavaScript

    标题 "Pure JS (1): 在 jetty 上运行 JavaScript" 暗示了本文将探讨如何在 Jetty 服务器上执行纯 JavaScript 代码。Jetty 是一个轻量级、开源的 Java Web 应用服务器,而 Pure JS 提示我们将讨论如何在后端环境中...

    [转] PureMVC心得教程:使用puremvc框架实现的贪吃蛇

    本教程将基于PureMVC框架讲解如何实现一个经典的“贪吃蛇”游戏,以此来深入理解PureMVC的核心概念和工作流程。 在MVC设计模式中,模型(Model)负责处理数据和业务逻辑,视图(View)负责显示数据,而控制器...

    flash actionscript3教程之pureMVC实现、术语阐述及最佳实践.zip

    《Flash ActionScript3 教程:PureMVC 实现、术语阐述及最佳实践》 在Flash开发领域,ActionScript3(AS3)是用于创建交互式内容和应用程序的主要编程语言。而PureMVC是一个轻量级的框架,它提供了一种结构化的方式...

    Pure JS (5.2):服务器端与客户端共用页面渲染代码

    这篇文章将探讨如何使用纯JavaScript(Pure JS)实现这两种渲染方式的共享代码,从而提高代码复用性和效率。 一、服务器端渲染(SSR) 服务器端渲染是指在服务器上执行JavaScript,生成完整的HTML页面并将其发送到...

    pure-upload:完全无依赖的纯JS文件上传库

    纯JS(TS)上传库,没有与Google Chrome,Firefox,IE10 +,Edge和现代移动浏览器兼容的依赖项。 安装 直接从页面下载ZIP文件,并将其包含到您的项目中。 通过npm通过npm install pure-upload --save或yarn add ...

    pure-ftp下载

    ### pure-ftp下载与配置详解 #### 知识点一:Pure-FTPd软件介绍 - **Pure-FTPd**是一款高性能、高安全性的FTP服务器软件,它支持多种认证方式,如LDAP、MySQL等,并提供了丰富的功能选项。适用于对安全性有较高要求...

    PureJS (6.3):Rhino 中的日志与 proxy 对象

    《PureJS (6.3):Rhino 中的日志与 Proxy 对象》 在JavaScript的世界里,Rhino是一个非常特别的存在。它是由Mozilla开发的一个开源的JavaScript引擎,它允许JavaScript代码运行在Java平台上,提供了丰富的Java对象...

Global site tag (gtag.js) - Google Analytics