【PHP开源代码栏目提醒】:网学会员--在 PHP开源代码编辑为广大网友搜集整理了:基于SWFUpload实现教学资源库大容量附件上传功能 - 期刊论文绩等信息,祝愿广大网友取得需要的信息,参考学习。
技术应用基于 SWFUpload 实现教学资源库大容量附件上传功能 杨伟杰 (广东外语艺术职业学院 信息技术系,广东 广州 510640) 摘 要:大容量教 学资源附件的文件 上传是教学资源库 系统软件的一个必 备的重要功能。
在 分析实现大容量附 论 件上传功 能常用方法和上传 容易失败的原因的 基础上, 述了在.Net 环境下基 于 SWFUpload 的文 件上传功能的具体 开发步骤 ,实现了教学 资源库系统开发中 大容量附件的上传 功能。
关键词: SWFUpload; 环境;教学资 源库 大容量附件上 传; Net 中图分类 号: G434 文 献标识码:A 文 章编号: ( 1672-7800 2012)09-0071-03 是:在复杂的异构网络环境中,国内电信供应商之间以及教育网0 引言 与电信网络之间存在技术障碍,导致跨网络传递数据时实际上 行速率大幅下降,容易造成页面响应超时。
在教学资源库系统中,文件上传是一个必备的重要功能。
为了解决教学资源库系统开发中大容量附件上传的问题,在教学视频和录屏、含视频的多媒体课件等大容量教学资源的 笔者在.Net 环境下使用 SWFUpload 实现了该功能。
上传过程中,很容易出现超时或是浏览器无响应的情况,导致文件上传失败,给教学资源管理带来不好的用户体验,成为一个困 2 基于 SWFUpload 实现大容量附件上传扰教学资源库系统软件开发人员的常见问题。
2.1 Swfupload 简介1 大容量附件上传方法及失败原因 SWFUpload 是一个基于 Flash Player 的
开源 JavaScript 类库, 它提供了强大的文件上传功能,并支持 asp.net、
php、 开发环 java1.1 实现大容量附件上传的常用方法 境。
它允许开发者使用 XHTML、CSS 和 JavaScript 来定制它在 基于 Web 的文件上传可使用 FTP 或 HTTP 协议。
用 FTP 浏览器下的外观和显示上传进度条,并提供了一组简明的 Java-协议上传相对稳定,但受到 FTP 服务器架设、安全性和系统用 Script 事件,可让开发者在文件上传过程中更新页面内容来实现户和文件读写权限的限制,增加了开发的复杂性和难度,因此 〔1〕 各种动态效果 。
其主要特点有:支持多个文件同时以类似 AJAX一般考虑使用 HTTP 协议。
使用.Net 自带的 FileUpload 控件比 的无刷新上传;能显示上传进度;可限制文件上传的大小、数量较方便,但受到 .net 环境下默认的上传容量限制,且无进度条 和类型;兼容 jQuery Prototype 等 JavaScript 类库;支持 Flash 8、反馈文件上传的进度,不适合用于大附件上传。
根据笔者的实 Flash9 和 Flash10。
SWFUpload 已在 YouTube 和 WordPress 等大践, Net 自带的 FileUpload 控件在电信网络环境下成功上传的 . 型网站中得到应用。
大小一般不超过 15M。
因此, 如 要上传比较大的文件, 1G 以上 2.2 使用 Swfupload 实现资源上传的过程的文件,就要使用其它的上传类库或控件,例如 SWFUpload、 Nea- 首先在 SWFUpload 的主页下载其最新版本,将解压缩后得tUpload 和 RadUpload.Net2 等。
到的 swfupload、 和 images 三个目录复制到开发项目的根目录。
js1.2 大容量附件上传容易失败的原因 然后新建资源上传主页面 ResourceUpload.aspx,后台上传处理脚 大容量附件上传失败的内部原因是: Net 环境中默认只能 . 本 upload.ashx,插入数据库记录页面 InsertFileRecord.aspx,及保上传小于 4M 的文件, 则有默认最大上传 200K 的限制, IIS 虽然 存上传的文件目录 Upload。
可通过修改 中的 “c:windowssystem32inetsrvmetabase.xml” “AS- 2.2.1 在主页面加载 SWFUpload 对象和用户控件PMaxRequestEntityAllowed”值来解除 IIS 的限制,但在实际开发 在主页面 ResourceUpload.aspx 加入一个 form,指定其上传中还要考虑 Session 超时导致页面无响应的问题。
外部原因则收稿日期:2012-08-19项目基金:全国教育信息技术研究“十二五”规划 2011 年度重点课题(116220111)作者简介:杨伟杰 , 广东遂溪人, (1981-) 男, 研究方向为教育信息技术。
广东外语艺术职业学院信息技术系讲师, 2012 年 第 9 期 下半月 软件导刊 教育技术 ( ) · 71 技术应用处理文件
代码为 upload.ashx。
然后加入 SWFUpload 对象的两 个ltdivgtdivprogresscontainer、divprogressGroup,在ltdivgt upload- ( swfu new SWFUpload settings)Msg 中载入 ResourceName、hdfUploadFilePath 两个隐藏元素和按 钮 btnInportFileRecord,并将 btnInportFileRecord 设为不可见。
具 lt/scriptgt体
代码为: 2.2.3 设置回传值 配置 uploadSuccess 事件, ltform idquotfrmMainquot actionquotupload.ashxquot runatquotserverquot enc- 在 js 目录下的 handlers.js 中修改其 uploadSuccess 事件,改变typequotmultipart/form-dataquotgt 页面隐藏元素 hdfUploadFilePath 的值,用于捕获回传的上传路 ltspan idquotspanButtonPlaceHolderquotgtlt/spangt 径,如成功上传则显示 btnInportFileRecord。
ltdiv idquotdivprogresscontainerquotgtlt/divgt ( function uploadSuccess file serverData) ltdiv idquotdivprogressGroupquotgtlt/divgt ltdiv idquot uploadMsg quot stylequotwidth: 498px height: 26pxquot run- tryatquotserverquotgtlt/divgt ( var progress new FileProgress file swfu.settings.custom_set- ltinput idquotResourceNamequot typequothiddenquot valuelt GetRes- tings.progressTarget) (ourceName )gt/gt ( progress.setComplete this.settings) ltinput idquothdfUploadFilePathquot typequothiddenquot runatserver /gtlt fg_uploads file.sizebr /gt // 用 uploadfileMsg 显示文件保存的路径 ltinput idquotbtnInportFileRecordquot typequotbuttonquot valuequot保存资 ( document.getElementById quotuploadMsgquot).innerHTML 上传 ( 源quot onclick PostRecords )stylequotdisplay:nonequot runatserver /gt 后的文件为serverData lt/formgt //设定 hdfUploadFilePath 的值来保存文件路径2.2.2 配置 SWFUpload 对象属性 . document.getElementById(quothdfUploadFilePathquot) Vaule ser- 在 ResourceUpload.aspx 的ltheadgtlt/headgt 元 素 中 加 入 对 verDataswfupload.js 和 js 目录中五个 js 文件的引用。
然后新建 swfu 变 //将 btnInportFile 改为显示的可点击状态量,并设定 swfupload.swf 存放的位置 、 (flash_url) 上传的操作文 (quotbtnInportFileRecord quot) document.getElementById .style.display 件路径 、 (upload_url) 文件大小限制 、 (file_size_limit) 可上传文件 block类型(file_types)等配置信息。
( catch(ex) this.debug ex) ltscript typequottext/javascriptquot srcquotswfupload/swfupload.jsquotgtlt/ scriptgt 2.2.4 在 upload.ashx.cs 中写上传
代码 ltscript typequottext/javascriptquot srcquotjs/swfupload.queue.jsquotgtlt/ 在 upload.ashx.cs 中写入基于 IHttpHandler 类的 C上传
代码。
scriptgt IHttpHandler 类可以同步处理 HTTP Web 要求,提高了文件上传 ltscript typequottext/javascriptquot srcquotjs/fileprogress.jsquotgtlt/scriptgt 的效率。
ProcessRequest 函数中定义了文件上传的处理过程,具 ltscript typequottext/javascriptquot srcquotjs/filegroupprogress.jsquotgtlt/ 体
代码为:scriptgt using System using System.Collections.Generic ltscript typequottext/javascriptquot srcquotjs/handlers.jsquotgtlt/scriptgt using System.Web using System.IO ltscript typequottext/javascriptquotgt namespace DemoSwfUpload var swfu public class upload : IHttpHandler ( window.onload function ) var settings (HttpContext context) public void ProcessRequest //上传的操作文件路径 upload.ashx try flash_url: quotswfupload/swfupload.swfquot HttpPostedFile file upload_url: quotupload.ashxquotfile_size_limit: quot100 MBquot for(int i 0 i lt context.Request.Files.Count i) file_types: quot.quot file_types_description: quotAll Filesquot file_upload_limit: 100 file_queue_limit: 0 〔 file context.Request.Files i〕 custom_settings: if(file null file.ContentLength 0 string.IsNullOrEmpty progressTarget: quotdivprogresscontainerquot (file.FileName)) progressGroupTarget : quotdivprogressGroupquot continue … //获取上传文件的全路径 72 · 2012 年 第 9 期 下半月 软件导刊 教育技术 ( ) 技术应用 string FileName file.FileName ( document.getElementById quothdfUploadFilePathquot).Vaule // ExtenName 扩展名 var fResouceName document.getElementById(quotResourceN- ( string ExtenName System.IO.Path.GetExtension FileName) amequot).value //合并得到服务器上的完整路径 frmMain.actionquotInsertFileRecord.aspx ResouceName quot ( string SaveFileName quotUpload/quot DateTime.Now.ToString quot fResouceName quotampUploadFilePathquotfUploadFilePathquotquotyyyyMMddHHmmquot) ExtenName () frmMain.submit //在站点根目录下检测上传目录是否存在 string strDirectory quotUpload/quot lt/scriptgt ( ( ) if System.IO.Directory.Exists strDirectory) System.IO. 2.2.6 保存资源记录 (Directory.CreateDirectory strDirectory) 在 InsertFileRecord.aspx 完成数据库的记录插入动作。
通过 //将文件写入服务器对应的物理目录 〔quotUploadFilePath quot〕 使用 Request. QueryString 就可以获得文件上 ( (context. Request. Physi- file. SaveAs System. IO. Path. Combine 传后的路径。
基于 ADO.NET 技术,使用 T-SQL 的 insert 语句或calApplicationPath SaveFileName ) 存储过程,将教学资源的名称、类型、文件大小、著者、文件路径、 //输出上传文件路径给 handlers.js 捕获 资源缩略图等信息保存到数据库中即可。
( context.Response.Write SaveFileName) 2.2.7 Web.config 中配置请求长度和执行时间 最后,在 Web.config 文件的ltsystem.webgt元素内设定 ma- xRequestLength 和执行时间,防止页面超时。
代码为: catch(Exception ex) lthttpRuntime maxRequestLengthquot900000quot executionTime- context.Response.StatusCode 500 outquot300quot /gt ( context.Response.Write ex.Message) ( context.Response.End ) 3 结语 大容量教学资源附件的文件上传是教学资源库系统软件的 ( finally .
上一篇:
基于Struts2_Spring_Hibernate三种框架的通用Web框架的研究及应用
下一篇:
为定制而来 欧马可快递物流一体化解决方案抢滩苏浙沪