`
lovehui0228
  • 浏览: 101036 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Dojo异步上传文件

阅读更多

Dojo是一项蛮新的前台技术,作为一种javascript工具集,学起来不太难,就是网上有用的资料不是很多,有些东西要靠自己慢慢捉摸~~~

dojo的异步传输功能还是很方便的,有三种,具体就不说了,网上可以查到.但如果要用到上传文件的话,只有用dojo.io.iframe方法来传输了.

 

先帖前台,节选了功能核心部分代码:

 

<script type="text/javascript" src="dojo-lib/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
    <script type="text/javascript">
		dojo.require("dojo.parser");
		dojo.require("dojo.io.iframe"); 

function handler(response, ioArgs)
		{	
			dojo.byId("background").src = response;
		
			if(!(response instanceof Error))
			{
				alert("文件上传成功!");
			}
			else
			{
				alert("文件上传失败!");
			}
		}
		
		function uploadImage()
		{
			dojo.io.iframe.send({
				form: "upload_form",
				url: "uploadFileSave.action",
				method: "post",
				handleAs: "text",
				handle: handler
			});
		}

 

 Action类代码:

 

package com.action.dojoAction;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadFileSave extends ActionSupport {

	private static final long serialVersionUID = 1L;
	
	private static final int BUFFER_SIZE = 16 * 1024 ;
	
	private File myFile;
    private String fileName;
   
    private InputStream textStream;
    
	public InputStream getTextStream() {
		return textStream;
	}

	public void setTextStream(InputStream textStream) {
		this.textStream = textStream;
	}

	public void setMyFileFileName(String fileName)  {
		
	    this.fileName = fileName;
	} 
	
	public String getFileName()
	{
		return fileName;
	}

	public void setMyFile(File myFile) {
		this.myFile = myFile;
	}

	private static void copy(File src, File dst)  {
        try  
        {
        	InputStream in = null ;
        	OutputStream out = null ;
            try  
            {                
            	in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
            	out = new BufferedOutputStream(new FileOutputStream(dst), BUFFER_SIZE);
                byte [] buffer = new byte[BUFFER_SIZE];
                while (in.read(buffer) > 0 )  
                {
                   out.write(buffer);
                } 
            } 
            finally  
            {
                if (null != in)  
                {
                	in.close();
                } 
                if (null != out)  
                {
                	out.close();
                } 
            } 
         } 
         catch (Exception e)  
         {
        	 e.printStackTrace();
         }
	} 
	
	private static String getExtention(String fileName)  
    {
    	 int pos = fileName.lastIndexOf(".");
    	 return fileName.substring(pos);
    } 
	
	private static String getHtmlFilePath(String filePath)
	{
		StringBuffer str = new StringBuffer();
	    str.append("<html><head></head><body>");
	    str.append("<textarea>");
	    str.append(filePath);
	    str.append("</textarea>");
	    str.append("</body></html>");
	    
	    return str.toString();
	}
	
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		String imageFileName;
		imageFileName = new Date().getTime() + getExtention(fileName);
		String filePath = "UploadImages\\" + imageFileName;
		
  	  	File imageFile = new File(ServletActionContext.getServletContext().getRealPath("\\UploadImages") + "\\" + imageFileName);
  	  	copy(myFile, imageFile);  
  	  	
	    try
	    {
	        textStream = new ByteArrayInputStream(getHtmlFilePath(filePath).getBytes("UTF-8"));
	    }
	    catch(IOException e)
	    {
	        e.printStackTrace();
	    }
	    
  	  	return SUCCESS;
	}
	
	public void validate()
	{
		System.out.println("AjaxAction-UploadFileSave: " + "validate()");
	}

}

 

struts配置代码:

 

<action name="uploadFileSave" class="com.action.dojoAction.UploadFileSave">
			<result name="success" type="stream">
				<param name="contentType">text/plain</param>
				<param name="inputName">textStream</param>
				<param name="bufferSize">1024</param></result>
			<result name="input" type="chain">imageUploadInit</result>
		</action>

  

 

按我的理解解释一下:首先dojo.io.iframe.send函数中的handleAs类型比较常用的是html,json,text这几种,这里面有个地方很莫名其妙,除了html格式的其余几种格式都要写成"<html><head></head><body><textarea>data</textarea></body></html>"这样的形式,data是你要传输的数据,这个当时让我超级无语.还有一点就是struts的配置问题,要配置成stream类型返回,照着上面配就可以了.最后要说明的一点就是dojo用这种方法的本质还是用了iframe框架来实现的,ajax是不能异步传输文件的,所以dojo也就不可能用ajax传值的那种正统的异步传输方式实现异步~~~

3
0
分享到:
评论
1 楼 无谓生活 2012-07-13  
楼主你好,我用的这种方法,总报找不到文件错误,请问是怎么回事啊?
java.io.FileNotFoundException: C:\Tomcat-5.0.28\work\Catalina\localhost\ems\upload__613821c2_1387dded243__8000_00000012.tmp (系统找不到指定的文件。)

相关推荐

    多文件上传 dojo组件 dojox.form.FileUploader

    它支持异步上传,可以通过AJAX或者IFrame技术来实现后台传输。 4. **HTML5 File API**:现代浏览器提供的API,允许JavaScript操作本地文件,包括读取文件内容、获取文件元数据以及上传文件。 5. **多文件上传**:...

    dojo-0.3.1-ajax

    6. **上传文件** 虽然基本的xhr方法不支持文件上传,但Dojo提供了一个`dojo.form`模块,可以处理表单数据并实现文件上传。 7. **跨域请求** Dojo的AJAX功能支持跨域请求,通过设置`preventCache`、`...

    dojo开发文档

    8. **dojo/ xhr和dojo/io**:Dojo的`dojo/xhr`和`dojo/io`模块处理AJAX通信,支持GET、POST等各种HTTP请求,还有跨域、文件上传等功能。 9. **dojo/json**:`dojo/json`模块用于JSON数据的序列化和反序列化,对于...

    Dojo1.11正式版

    7. **dojo/request网络请求库**:Dojo请求模块简化了Ajax和其他HTTP请求,支持XMLHttpRequest和JSONP,以及流式传输和文件上传。 8. **dojo/store数据存储**:Dojo 1.11 提供了dojo/store模块,用于抽象数据存储,...

    Dojo框架英文使用指南

    此外,它还包含了dojoxFormData,用于处理文件上传。 在实际应用中,Dojo的国际化和本地化功能也很强大,可以轻松地切换语言和适应不同地区的文化习惯。Dojo的dojox/i18n模块为此提供了支持。 ...

    struts框架文件上传代码

    - 异步上传:使用Ajax或者Web组件(如jQuery File Upload)实现异步文件上传,提高用户体验。 - 分块上传:对于大文件,可以考虑分块上传,减少内存压力。 通过以上步骤,你可以在Struts2框架下实现一个基本的文件...

    struts2之多个文件上传

    Struts2是一个流行的Java web开发框架,它提供了一种...此外,对于大量文件上传,可能需要优化处理流程,例如使用异步上传或者分批上传,以提高用户体验和系统性能。在项目实践中,记得根据具体需求进行调整和优化。

    Struts2.0上传进度条简单示例

    然后,你可以使用AJAX异步上传文件,同时更新进度条状态。例如,可以使用`FormData`对象和`XMLHttpRequest`来实现: ```html &lt;div id="progressBar"&gt;&lt;/div&gt; ()"&gt;上传 function uploadFile() { var ...

    详解JavaScript异步编程中jQuery的promise对象的作用_.docx

    Promise 对象可以应用于各种异步编程场景,如 Ajax 请求、文件上传、数据库操作等。它提供了一种简洁的方式来处理异步操作的结果,使得代码更加简洁易读。 Promise 对象是 JavaScript 异步编程中的一种重要概念,...

    struts2 upload file

    - 使用异步上传:在大文件上传时,可以考虑使用异步处理,避免阻塞用户的浏览器。 - 分块上传:对于非常大的文件,分块上传可以提高用户体验,并减少内存占用。 - 文件大小限制:通过配置限制文件大小,防止恶意...

    所有工具jar包ant+charDirector+dojo+dom+hibernate+junite+log4j+spring+struts+xml+jspSmartUpload.jar

    11. **jspSmartUpload.jar**:这可能是用于Java Servlets的文件上传组件,它简化了在Web应用中处理文件上传的过程,支持多文件上传和各种文件类型限制。 这些jar包组合在一起,为开发者提供了一个全面的开发环境,...

    ajax框架与struts框架的最佳结合讲解

    7. **异步上传文件**:通过Ajax结合Struts,可以实现文件的异步上传,提供进度条反馈,提高用户体验。 8. **优化性能**:合理使用Ajax避免不必要的请求,结合Struts的缓存机制和分页功能,进一步提升应用性能。 在...

    IBM_Ajax文件

    【IBM_Ajax文件】主要涉及的是IBM在Ajax技术方面的应用和教程,Ajax全称为"Asynchronous JavaScript and XML",即异步JavaScript与XML。Ajax技术允许Web应用在无需刷新整个页面的情况下,与服务器交换数据并更新部分...

    Ajax典型实例(个人总结)

    5. **异步上传文件**:传统方式上传文件会刷新整个页面,而Ajax结合HTML5的File API可以实现无刷新上传。创建FormData对象,添加文件,然后使用`$.ajax()`发送POST请求。 6. **实时聊天**:实时通信应用,如在线...

    progressbar project

    这个项目对于那些需要显示后台处理过程,如大数据计算、文件上传下载、长时间运行的任务等场景非常有用。 【描述】中提到的核心知识点包括: 1. **后台任务进度跟踪**:在许多应用程序中,用户可能需要了解后台...

    三大框架整合ajax

    3. **异步处理**:比如文件上传,用户选择文件后,通过Ajax异步上传,避免页面刷新,显示上传进度,提高用户体验。 4. **动态下拉框**:根据用户在某个下拉框的选择,使用Ajax动态加载关联的下拉框选项,提高数据...

    sturts2中文教程~

    3. **文件上传与下载**:Struts2提供了方便的文件上传和下载支持,包括多文件上传。 4. **Ajax支持**:通过JSON和dojo插件,Struts2能够很好地支持异步请求和响应。 5. **模板技术**:除了默认的JSP视图外,Struts...

    DWR.rar_dwr

    通过上述文件,我们可以学习到DWR的核心概念、配置方法、实际应用案例以及如何与其他技术(如JSF和DOJO)集成。同时,这些资源也覆盖了从基础到进阶的多个层次,适合不同阶段的开发者学习和参考。

    truts2表单标签共46页.pdf.zip

    8. **Ajax支持**:Struts2的AJAX插件(如Struts2 Dojo标签库)提供了无刷新的用户体验,`s:a`、`s:submit`等标签的异步提交功能会有所涉及。 9. **自定义标签**:如果深入,可能还会讲解如何扩展Struts2,创建...

Global site tag (gtag.js) - Google Analytics