`

一款文件上传信息即时同步刷新的代码的学习

阅读更多

对下面链接提供的文件上传的代码的学习。
http://maozj.iteye.com/blog/695628



      前两天看到这个文件上传的例子,大家都说不错,正好近来我在研究commons-fileupload,来分析一个这个代码,看看设计和实现思想。
可以肯定的是作者对fileupload是很熟悉的,这个里面的关键就是自己实现了一个FileItem,覆盖了父类里面的getOutputStream函数,所以由此就衍生了MonitoredDiskFileItem,他就是来实现这个函数的,返回一个自定义的的OutputStream,作者自定了OutputStream,感觉使用到了装饰模式,就是在MonitoredOutputStream里面封装一个OutputStreamListener,但是使用的是它的子类UploadListener,关键得一步就是在write函数里面会对UploadListener的bytesRead进行赋值,这个地方感觉要特别注意的是,MonitoredOutputStream真正做事的类是实际上还是DeferredFileOutputStream,因为在调用getOutputStream的时候,去构建的MonitoredOutputStream,第一个参数是super.getOutputStream(), 所以这个实际上还是DeferredFileOutputStream。起初我因为这里只能为DeferredFileOutputStream,但是我做了下面的修改后发现也是可以的,所以就看了一下源码,其实这个OutputStream是任何流都可以,它只做了把文件的内容拷贝到指定的输出流里面。
       其他的地方就很好理解了,在servlet里面有一个分支是执行文件上传操作的,一个是实现状态查询工作的。作者在将UploadListener.FileUploadStats会在执行了文件上传操作后会将该变量放到session里面,然后以后由前端进行状态查询,这个都比较好理解。这里面有一个比较关键得是listener实际上是和MonitoredOutputStream进行绑定了,在调用了write操作后,UploadListener类的FileUploadStats里面的bytesRead变量会变化,下一次从session里面取出来的FileUploadStatus里面的bytesRead就会跟着变化,其实session本质上就是一个特殊的map,所以我们改变了属性,是可以生效的,有点我们修改引用的效果。
      



    总的来说写的很好,但是有个疑问为什么要这样实现呢,而不是以FileUpload里面自带的UploadProgressListener呢?这么实现感觉感觉和那边有点重复?
    另外,我喜欢eclipse,就转成eclipse了,欢迎大家下载。







  • 大小: 21.8 KB
分享到:
评论

相关推荐

    分享一款文件上传信息即时同步刷新的代码

    通过以上技术点,我们可以构建一个高效且用户友好的文件上传系统,实现文件信息的即时同步刷新。在提供的压缩包文件"af"中,可能包含了实现这些功能的源代码,具体实现细节需要解压后查看代码来了解。

    swfupload + ASP批量上传图片可同步写入Access

    总结来说,"swfupload + ASP批量上传图片可同步写入Access"是一个基于SWFUpload和ASP技术的文件上传解决方案,它利用Flash实现多文件批量上传,并将图片信息同步写入Access数据库,同时实现在页面上的即时显示。...

    JAVA上百实例源码以及开源项目源代码

    1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款用于反映颜色变化的面板...

    ASP.NET多功能聊天软件的设计与开发——文字聊天文件传输模块(源代码).rar

    9. **多用户同步**:在多用户环境中,确保所有用户看到的消息和文件状态同步是一项挑战。SignalR的群组和广播功能可以用来解决这个问题。 10. **错误处理和日志记录**:为了调试和问题排查,良好的错误处理和日志...

    代码编辑器DreamWeaver

    DreamWeaver是一款由Adobe公司开发的专业级代码编辑器,它为网页设计师和前端开发者提供了集成的、直观的环境,使得创建、编码以及管理网站和移动内容变得更加容易。这款软件不仅适用于初学者,也深受专业人士的喜爱...

    IM即时通讯

    - **实时更新**:消息、联系人列表等信息应实时刷新,保持用户感知的即时性。 综上所述,"IM android 即时通讯demo"项目涵盖了以上所有关键点,为开发者提供了一个实现Android即时通讯功能的基础框架。通过学习和...

    即时聊天demo ios

    即时聊天在iOS应用开发中是一项常见且重要的功能,它允许用户实时交流信息,包括文本、表情、图片、视频以及地理位置等。在这个“即时聊天demo iOS”项目中,开发者使用了第三方聊天SDK来实现这些功能。这里我们将...

    ASP基于WEB聊天室的设计与实现(源代码+论文+任务书).rar

    8. **文件上传**:如果聊天室允许用户共享文件,还需要处理文件上传功能,这涉及到文件验证、大小限制以及存储位置的管理。 通过这个项目,学生不仅能掌握ASP的基本语法和用法,还能深入了解Web应用程序的架构和...

    DreamWeaver网站开发教程

    《DreamWeaver网站开发教程》是一份全面指导用户掌握Adobe DreamWeaver的资源,这款强大的软件是许多网页设计师和开发者首选的工具。本教程旨在帮助初学者和有一定基础的用户深入理解和熟练运用DreamWeaver来创建、...

    网页自动回复消息客服源码.zip

    如果要部署到服务器,你需要确保服务器支持HTML文件的静态托管,并将此文件上传至服务器的适当位置。如果与其他源码配合使用,可能需要配置额外的服务器端脚本(如PHP或Node.js)来处理更复杂的业务逻辑,例如与...

    Dreamweaver教程

    1. FTP发布:设置FTP服务器信息,直接在Dreamweaver中上传和管理网站文件。 2. 站点地图:可视化展示网站结构,方便管理和更新。 八、移动设备优化 了解如何使用Dreamweaver创建适应不同屏幕尺寸的响应式网页,确保...

    yeah页面js

    前者是一个HTML文件,可能是网页的源代码,展示了邮箱的用户界面结构。后者是一个文件夹,可能包含了页面所需的CSS样式表、JavaScript脚本、图片和其他资源文件。通过分析这些文件,我们可以深入理解"yeah邮箱"的...

    WeBuilder 2007

    此外,软件中的实时预览功能允许用户在编写代码的同时即时查看页面效果,减少了反复刷新浏览器的麻烦。 对于JavaScript和脚本语言的处理,WeBuilder 2007同样表现出色。它支持JavaScript的自动完成,包括jQuery和...

    Dreamweaver技巧

    Dreamweaver是一款由Adobe公司开发的专业网页设计软件,深受广大Web开发者喜爱。它集成了代码编辑、视觉设计和站点管理等功能,使得用户可以方便地在设计视图和代码视图之间切换,实现所见即所得的网页制作。下面将...

    AHPU云笔记

    用户只需将war文件上传到服务器,服务器会自动解压并运行应用。 通过AHPU云笔记,开发者不仅可以学习到基础的Web开发技术,还能深入理解现代Web应用中的实时通信和用户体验优化策略。对于想要提升Web技能的学生或者...

    快乐留言本_网站在线聊天留言源码.rar

    《快乐留言本_网站在线聊天留言源码》是一款用于网站互动交流的软件资源,它能够为网站提供一个方便用户留言、交流的平台。通过这款源码,开发者可以快速集成在线聊天和留言功能,提升网站的互动性和用户体验。下面...

    FilesApp:文件浏览器

    例如,当用户点击一个文件夹进行浏览时,JavaScript可以即时处理这一事件,动态加载文件列表,无需页面刷新,极大地提升了用户体验。此外,JavaScript还能实现拖放功能,使得文件移动或复制变得更加直观和便捷。 ...

    骑士PHP人才系统 4.2.66.zip

    优化 HR工具箱上传的文件的格式支持pptx和xlsx;优化 后台升级程序;优化 系统资源路径改为绝对路径;优化 简历批量导入问题;优化 单选框禁用状态;优化 个人中心头部搜职位新开页面;优化 后台发布内容时分站可...

    弹幕视频网站-适合毕设,大作业、实训项目包含完整源码以及数据库文件.rar

    这个压缩包包含了完整的源代码和数据库文件,为学习者提供了一个实际操作的平台,以理解和掌握视频流媒体服务和交互式用户体验的设计。接下来,我们将详细讨论这个项目中涉及的主要知识点。 1. **前端技术**: - *...

Global site tag (gtag.js) - Google Analytics