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传值的那种正统的异步传输方式实现异步~~~
分享到:
相关推荐
它支持异步上传,可以通过AJAX或者IFrame技术来实现后台传输。 4. **HTML5 File API**:现代浏览器提供的API,允许JavaScript操作本地文件,包括读取文件内容、获取文件元数据以及上传文件。 5. **多文件上传**:...
6. **上传文件** 虽然基本的xhr方法不支持文件上传,但Dojo提供了一个`dojo.form`模块,可以处理表单数据并实现文件上传。 7. **跨域请求** Dojo的AJAX功能支持跨域请求,通过设置`preventCache`、`...
8. **dojo/ xhr和dojo/io**:Dojo的`dojo/xhr`和`dojo/io`模块处理AJAX通信,支持GET、POST等各种HTTP请求,还有跨域、文件上传等功能。 9. **dojo/json**:`dojo/json`模块用于JSON数据的序列化和反序列化,对于...
7. **dojo/request网络请求库**:Dojo请求模块简化了Ajax和其他HTTP请求,支持XMLHttpRequest和JSONP,以及流式传输和文件上传。 8. **dojo/store数据存储**:Dojo 1.11 提供了dojo/store模块,用于抽象数据存储,...
此外,它还包含了dojoxFormData,用于处理文件上传。 在实际应用中,Dojo的国际化和本地化功能也很强大,可以轻松地切换语言和适应不同地区的文化习惯。Dojo的dojox/i18n模块为此提供了支持。 ...
- 异步上传:使用Ajax或者Web组件(如jQuery File Upload)实现异步文件上传,提高用户体验。 - 分块上传:对于大文件,可以考虑分块上传,减少内存压力。 通过以上步骤,你可以在Struts2框架下实现一个基本的文件...
Struts2是一个流行的Java web开发框架,它提供了一种...此外,对于大量文件上传,可能需要优化处理流程,例如使用异步上传或者分批上传,以提高用户体验和系统性能。在项目实践中,记得根据具体需求进行调整和优化。
然后,你可以使用AJAX异步上传文件,同时更新进度条状态。例如,可以使用`FormData`对象和`XMLHttpRequest`来实现: ```html <div id="progressBar"></div> ()">上传 function uploadFile() { var ...
Promise 对象可以应用于各种异步编程场景,如 Ajax 请求、文件上传、数据库操作等。它提供了一种简洁的方式来处理异步操作的结果,使得代码更加简洁易读。 Promise 对象是 JavaScript 异步编程中的一种重要概念,...
- 使用异步上传:在大文件上传时,可以考虑使用异步处理,避免阻塞用户的浏览器。 - 分块上传:对于非常大的文件,分块上传可以提高用户体验,并减少内存占用。 - 文件大小限制:通过配置限制文件大小,防止恶意...
11. **jspSmartUpload.jar**:这可能是用于Java Servlets的文件上传组件,它简化了在Web应用中处理文件上传的过程,支持多文件上传和各种文件类型限制。 这些jar包组合在一起,为开发者提供了一个全面的开发环境,...
7. **异步上传文件**:通过Ajax结合Struts,可以实现文件的异步上传,提供进度条反馈,提高用户体验。 8. **优化性能**:合理使用Ajax避免不必要的请求,结合Struts的缓存机制和分页功能,进一步提升应用性能。 在...
【IBM_Ajax文件】主要涉及的是IBM在Ajax技术方面的应用和教程,Ajax全称为"Asynchronous JavaScript and XML",即异步JavaScript与XML。Ajax技术允许Web应用在无需刷新整个页面的情况下,与服务器交换数据并更新部分...
5. **异步上传文件**:传统方式上传文件会刷新整个页面,而Ajax结合HTML5的File API可以实现无刷新上传。创建FormData对象,添加文件,然后使用`$.ajax()`发送POST请求。 6. **实时聊天**:实时通信应用,如在线...
这个项目对于那些需要显示后台处理过程,如大数据计算、文件上传下载、长时间运行的任务等场景非常有用。 【描述】中提到的核心知识点包括: 1. **后台任务进度跟踪**:在许多应用程序中,用户可能需要了解后台...
3. **异步处理**:比如文件上传,用户选择文件后,通过Ajax异步上传,避免页面刷新,显示上传进度,提高用户体验。 4. **动态下拉框**:根据用户在某个下拉框的选择,使用Ajax动态加载关联的下拉框选项,提高数据...
3. **文件上传与下载**:Struts2提供了方便的文件上传和下载支持,包括多文件上传。 4. **Ajax支持**:通过JSON和dojo插件,Struts2能够很好地支持异步请求和响应。 5. **模板技术**:除了默认的JSP视图外,Struts...
通过上述文件,我们可以学习到DWR的核心概念、配置方法、实际应用案例以及如何与其他技术(如JSF和DOJO)集成。同时,这些资源也覆盖了从基础到进阶的多个层次,适合不同阶段的开发者学习和参考。
8. **Ajax支持**:Struts2的AJAX插件(如Struts2 Dojo标签库)提供了无刷新的用户体验,`s:a`、`s:submit`等标签的异步提交功能会有所涉及。 9. **自定义标签**:如果深入,可能还会讲解如何扩展Struts2,创建...