`
tapestry
  • 浏览: 188421 次
社区版块
存档分类
最新评论

在Tapestry4中使用SWFUpload上传文件

阅读更多
    Tapestry4中上传文件的组件对文件的处理做了很好的封装,用户界面最常用的还是普通Form中的
<input type="file">,最近看了SWFUpload(http://labb.dev.mammon.se/swfupload/)组件,感觉不错,
界面可以设计的很友好,定制性很强,而且提供了javascript回调接口,可以很好的跟踪文件上传的各种事件。
SWFUpload给出的例子中,只是给出php的后台实现,下面给出在Tapestry4中的实现。
第一步:下载并修改SWFUpload
        http://labb.dev.mammon.se/swfupload/上下载SWFUpload_beta.zip解压,我们所需要的
文件都放在目录jscripts\SWFUpload下,拷贝images目录下的文件到你项目中存放图片的文件,我暂放于项目
中的额images/SWFUpload中,同样mmSWFUpload.js拷贝到项目中存放javascript脚本的文件夹中,我暂放
js/SWFUpload,同时我也将upload.swf放在js/SWFUpload,这些都是可以配置的,可以根据项目自己存放。
第二步:定制SWFUpload
    修改mmSWFUpload中的跟路径相关的字符串,例如21行中的
var so = new SWFObject("jscripts/SWFUpload/upload.swf",…
,这个是关键,
根据我存放的位置我要修改为var so = new SWFObject("js/SWFUpload/upload.swf",…
其他还有图片的默认路径,这些可以在使用时定制,不修改也可以。
第三步:设计SWFUpload界面
代码
 
  1. <div id="uploadFile"><!---->div>  
  2.   
  3. <div id="fileContainer"><!---->div>  
  4.   
  5. <div id="progressInfoElm"><!---->div>  
  6.   
  7. <script type="text/javascript">  
  8.   
  9. mmSWFUpload.init({  
  10.   
  11.         upload_backend : "/UploadFile.xhtml",  
  12.   
  13.        button_image : "/images/SWFUpload/btn_upload.png",  
  14.   
  15.        button_mouseover_image : "/images/SWFUpload/btn_upload_over.png",  
  16.   
  17.        target : "uploadFile",  
  18.   
  19.        allowed_filetypes : "*.gif;*.jpg;*.png",  
  20.   
  21.        upload_start_callback : 'uploadStart',  
  22.   
  23.        upload_progress_callback : 'uploadProgress',  
  24.   
  25.        upload_complete_callback : 'uploadComplete',  
  26.   
  27.        upload_error_callback : 'uploadError',  
  28.   
  29.        upload_cancel_callback : 'uploadCancel'  
  30.   
  31.     });  
  32.   
  33. uploadStart = function(fileObj) {  
  34.   
  35.     var container = document.getElementById("fileContainer");  
  36.   
  37.     container.innerHTML += "<span id='" + fileObj.name + "' >";  
  38.   
  39.     container.innerHTML += fileObj.name + ", ";  
  40.   
  41.     container.innerHTML += fileObj.size + ", ";  
  42.   
  43.     container.innerHTML += fileObj.type + "<!---->span><br />";  
  44.   
  45. }  
  46.   
  47.    
  48.   
  49. uploadProgress = function(fileObj, bytesLoaded) {  
  50.   
  51.     var pie = document.getElementById("progressInfoElm");  
  52.   
  53.     var proc = Math.ceil((bytesLoaded / fileObj.size) * 100);  
  54.   
  55.     pie.innerHTML = proc + " %";  
  56.   
  57. }  
  58.   
  59.    
  60.   
  61. uploadComplete = function(fileObj) {  
  62.   
  63.     document.getElementById(fileObj.name).className = "uploadDone";  
  64.   
  65.     document.getElementById(fileObj.name).innerHTML = objFile.name + " done!";  
  66.   
  67. }  
  68. <!---->script>   

上边中的UploadFile.xhml文件就是下一步将要处理文件上传的Tapestry类,将在下一步介绍。其中的target : "uploadFile",是指在哪里显示SWFUpload组件,需要指定个层或者其他html容器。其他的回调函数是示例中的代码,定制一下的话,可以实现很好的效果。<o:p></o:p>

<o:p></o:p>

第四步:编写Tapestry处理类<o:p></o:p>

  上一步中的UploadFile.xhtml,是配置Tapestryfriendly url的结果,实际上就是指调用UploadFile页面类。具体代码如下:<o:p></o:p>

<o:p> </o:p>

java 代码
 
  1. import java.io.File;  
  2.   
  3. import java.io.FileNotFoundException;  
  4.   
  5. import java.io.FileOutputStream;  
  6.   
  7. import java.io.IOException;  
  8.   
  9. import java.io.InputStream;  
  10.   
  11.    
  12.   
  13. import org.apache.commons.io.IOUtils;  
  14.   
  15. import org.apache.tapestry.annotations.InjectObject;  
  16.   
  17. import org.apache.tapestry.event.PageBeginRenderListener;  
  18.   
  19. import org.apache.tapestry.event.PageEvent;  
  20.   
  21. import org.apache.tapestry.html.BasePage;  
  22.   
  23. import org.apache.tapestry.multipart.MultipartDecoder;  
  24.   
  25. import org.apache.tapestry.request.IUploadFile;  
  26.   
  27.    
  28.   
  29. public abstract class UploadFile extends BasePage implements  
  30.   
  31.        PageBeginRenderListener {  
  32.   
  33.     @InjectObject("infrastructure:multipartDecoder")  
  34.   
  35.     public abstract MultipartDecoder getDecoder();  
  36.   
  37.    
  38.   
  39.     public void pageBeginRender(PageEvent event) {  
  40.   
  41.        IUploadFile file = getDecoder().getFileUpload("Filedata");  
  42.   
  43.        saveFile(file);  
  44.   
  45.     }  
  46.   
  47.    
  48.   
  49.     private void saveFile(IUploadFile uploadFile) {  
  50.   
  51.        File file = new File("whichFileYourWantToSave");  
  52.   
  53.        InputStream input = uploadFile.getStream();  
  54.   
  55.        try {  
  56.   
  57.            FileOutputStream output = new FileOutputStream(file);  
  58.   
  59.            IOUtils.copy(input, output);  
  60.   
  61.        } catch (FileNotFoundException e) {  
  62.   
  63.            e.printStackTrace();  
  64.   
  65.        } catch (IOException e) {  
  66.   
  67.            e.printStackTrace();  
  68.   
  69.        } finally {  
  70.   
  71.            IOUtils.closeQuietly(input);  
  72.   
  73.        }  
  74.   
  75.     }  
  76.   
  77. }  

<o:p></o:p>

 当然使用Page类只是个取巧的办法,最好还是写个Service类来处理,Page类的就需要有个模版文件,
可以创建个空的
UploadFile.html类文件跳过检查。whichFileYourWantToSave替换为你想要保存的文件位置。<o:p></o:p>

       这样SWFUpload组件就可以用在Tapestry中了,当然这里只是做个抛砖引玉,写个Service或者组件都是
可以的,再让美工做个好点的图标,在回调函数中写一些效果,最终可以作出很好的文件上传页面。
分享到:
评论

相关推荐

    Tapestry4开发指南

    创建组件类并定义其属性和行为,然后在模板文件中使用它们。 4) **定义页面**:页面是Tapestry4中的主要交互单元,它由一个或多个组件组成。在Java类中定义页面,然后在HTML模板中引用这些组件。 5) **配置URL映射...

    Tapestry 4 官方文档中版本

    "Tapestry4 Users Guide" 和 "Tapestry4 Quick Start" 这两份文档,分别提供了全面的用户指南和快速入门教程,帮助开发者了解和掌握Tapestry 4的使用方法和最佳实践。 10. **社区支持**: 作为Apache项目的一部分...

    tapestry4开发指南

    在深入探讨Tapestry 4的编程模型时,读者将学习如何使用Ivy或Maven来管理依赖,理解配置文件的结构,以及如何编写自定义组件。此外,书中还会涉及组件库的使用,包括内置的表单组件、导航组件等,这些组件可以帮助...

    tapestry官方中文文档

    虽然Tapestry 4的中文文档较少,但提供的《Tapestry4 用户指南》和《Tapestry4 快速启动》是宝贵的参考资料。它们将帮助初学者理解Tapestry的基本概念、组件使用、事件处理等方面的知识。 总的来说,Tapestry 4是...

    深入浅出Tapestry4一书源代码(2)

    在"深入浅出Tapestry4"这本书中,作者会详细讲解如何创建和配置组件,如何使用服务容器管理应用的依赖,以及如何利用Tapestry4的模板语言和事件机制来构建动态的Web应用。读者还可以从书中了解到错误处理、国际化和...

    Tapestry4开发指南.rar

    Tapestry4开发指南.rar Tapestry4开发指南.rar Tapestry4开发指南.rar

    深入浅出Tapestry4一书源代码(1)

    在源代码中,"IceRoom"可能是一个示例项目,它展示了如何使用Tapestry4创建动态Web页面。IceRoom项目可能包含了各种组件、服务、页面和模板文件,这些文件共同构成了一个功能完整的Web应用。通过调试这个项目,你...

    tapestry4和5学习资料

    通过这些资料的学习,开发者不仅能掌握Tapestry的基础知识,还能深入理解其高级特性,从而在实际项目中更加灵活地运用Tapestry框架,提高开发效率和代码质量。对于想要在Java Web开发领域专精Tapestry的程序员来说,...

    tapestry5中文文档

    为了开始第一个Tapestry 5 应用,可以下载提供的WAR文件,并在Eclipse等IDE中导入。对于Eclipse用户,需要选择"文件"-&gt;"导入",然后选择"WAR文件",指定WAR文件的位置,如果需要,还可以选择一个服务器运行环境。...

    tapestry官方中文文档及中文字典

    Tapestry4 Users Guide(2)则更深入地探讨了Tapestry的高级特性和最佳实践,可能包含: 1. **国际化与本地化**:讲解如何实现多语言支持,包括资源键和资源文件的管理。 2. **服务组件**:介绍Tapestry的服务组件...

    tapestry4+spring+hibernate整合实例

    Tapestry4、Spring 和 Hibernate 是三个在Java Web开发中至关重要的框架。Tapestry4 是一个MVC(Model-View-Controller)框架,提供了一种声明式编程模型,使得开发者可以更专注于业务逻辑,而不是页面的组装。...

    Tapestry 5 電子書

    《Tapestry 5 電子書》是关于Java Web开发框架Tapestry 5的一本详尽指南,由Packt Publishing在2007年出版。这本书旨在帮助开发者深入理解和掌握Tapestry 5的各个方面,从而利用其强大功能构建高效、可维护的Web应用...

    Tapestry 5.4.1 相关jar文件

    使用Tapestry 5.4.1 的开发者通常会把这些jar文件添加到项目的类路径中,以启动和运行Tapestry应用。在构建过程中,可能还需要配置Maven或Gradle等构建工具,以自动下载并管理这些依赖。 在实际开发中,Tapestry ...

    MyTapestry4-quickStart.rar_Tapestry4_quickstart tapestry_tapestr

    在这个名为"MyTapestry4-quickStart.rar"的压缩包中,包含的是一个Tapestry4的快速入门项目,帮助开发者快速了解并开始使用这个框架。 在描述中提到,这个项目是基于JDK1.5开发的,这意味着我们需要Java 1.5或更高...

    Tapestry4书中例子(水果商店)

    在“水果商店”例子中,我们将深入探讨Tapestry4如何实现一个简单的电子商务应用。 1. **Tapestry4基础概念** - **组件**: Tapestry4的核心是组件,它们是构建用户界面的基本单元,可以是按钮、表格、表单等。每个...

    tapestry教程资料文档合集

    Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...

Global site tag (gtag.js) - Google Analytics