在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中进行说明。故事很简单:上传一个文件,完毕后返回文件的大小,最后浏览器弹出该信息。
- 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>
- 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>
- 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
