Posts Tagged ‘sMash dojo upload ajax’

在sMash环境中,使用dojo来Ajax上传文件

Wednesday, June 25th, 2008

在dojo的test page中给出了如何上传文件,http://archive.dojotoolkit.org/nightly/dojotoolkit/dojo/tests/io/iframeUploadTest.html.可惜server端的code是python写的,现在把dojo的upload文件在WebSphere sMash的环境下实现,并且强调几个关键的trick,在code中进行说明。故事很简单:上传一个文件,完毕后返回文件的大小,最后浏览器弹出该信息。

  1. HTML code
    <form action="/resources/upload" id="uploadForm"
    <!-- 注意上传文件时需要的form属性enctype="multipart/form-data"  -->
    	method="POST"  enctype="multipart/form-data">
    <!-- 上传文件在HTML的控件 -->
    	<input type="file" name="attachment">
    	<input type="button" onclick="uploadIt(); return false;" value="send it!">
    </form>
  2. Javascript code
    <script type="text/javascript">
    	dojo.require("dojo.io.iframe");
    	function uploadIt(){
    		dojo.io.iframe.send({     //使用iframe进行提交
    			form: dojo.byId("uploadForm"),
    			handleAs: "application/json",
    			handle: function(response, ioArgs){
    				if(response instanceof Error){
    					console.error("Request FAILED: ", response);
    				}else{
    					alert(response);  //alert结果
    				}
    			}
    		});
    	}
    </script>
  3. zero code
    def onCreate() {
    	//zero中的上传文件放在request的files中
    	def attachment = request.files["attachment"]
     
    	//每个上传文件有上传文件的临时路径以及文件
    	def filepathUpload = attachment.path[0]
    	def fileName = attachment.filename[0]
     
    	int fileSize = new FileInputStream(new File(filepathUpload)).available()
    	def msg = "The size of your file '" + fileName + "' is " + fileSize + " bytes."
     
    	//这个是dojo iframe做定义的,必须要使用一个<textarea>进行包裹结果.
    	def iframeData = "<textarea>" + msg + "</textarea>"
    	println iframeData
    }

这个是sMash的project,可以Download(Ajax upload file using dojo in sMash)下来试试。

Useful links:

http://www.cs.tut.fi/~jkorpela/forms/file.html
https://www.projectzero.org/javadoc/latest/CORE/API/zero/core/context/GlobalContextURIs.Request.html#files