基于struts2的ajaxfileupload异步上传插件的使用

实例:

jsp页面

<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<title>文件上传</title>
<link rel="stylesheet"
	href="${pageContext.request.contextPath }/js/AjaxFileUploaderV2.1/ajaxfileupload.css">
<script type="text/javascript"
	src="${pageContext.request.contextPath }/js/AjaxFileUploaderV2.1/jquery.js"></script>
<script type="text/javascript"
	src="${pageContext.request.contextPath }/js/AjaxFileUploaderV2.1/ajaxfileupload.js"></script>
<script type="text/javascript">
	function FormSubmit() {
		var file = $("#file").val();
		if (file == "") {
			alert("请选择文件");
			return;
		}
		var fileType = file.substring(file.lastIndexOf(".") + 1);
		if (fileType != "docx" && fileType != "doc") {
			alert("上传文件格式错误");
			return;
		}
		var url = "${pageContext.request.contextPath}/struts2_upload.action?nowtime="
				+ new Date().getTime();
		$.ajaxFileUpload({
			url : url,
			secureuri : false,
			fileElementId : "file", //file的id 
			dataType : ‘json‘,//返回值类型 一般设置为json
			success : function(data, status) {
				alert(data.message);
			}
		});
	}
</script>
</head>
<body>
	<div>
		<form
			action="${pageContext.request.contextPath }/struts2_upload.action"
			method="post" enctype="multipart/form-data">
			<p>
				<label>请选择上传文件:</label><input type="file" name="file" id="file">
			</p>
			<p>
				<input type="button" value="提交" onclick="FormSubmit();" />
			</p>
		</form>
	</div>
</body>
</html>

Action代码

package org.zsm.learn.struts2.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.io.IOUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport {

	private static final long serialVersionUID = -1063647163701747470L;

	// 与上传文件相关的三个参数
	private File file;
	private String fileFileName;
	private String fileContentType;
	// Action相关参数的设置
	private String savePath;
	private long maximumSize;
	private String allowedTypes;

	// 返回结果
	private Map<String, Object> result;

	public Map<String, Object> getResult() {
		return result;
	}

	public String upload() {
		result = new HashMap<String, Object>();
		// 判断上传文件是否符合要求
		if (getFile() == null) {
			result.put("success", false);
			result.put("messages", "上传文件不能为空!!!");
		} else if (!validateUploadLength(maximumSize)) {
			result.put("success", false);
			result.put("message", "上传文件超出了限制!!!");
		} else if (!validateUploadType(allowedTypes)) {
			result.put("success", false);
			result.put("message", "上传文件类型不符合要求!!!");
		} else {
			// 获取存储上传目录
			String storageDir = ServletActionContext.getServletContext()
					.getRealPath(savePath);
			// 判断存储上传目录
			File storageFile = new File(storageDir);
			if (!storageFile.exists()) {
				storageFile.mkdirs();
			}
			// 上传文件
			File destFile = generateDestFile(storageDir, fileFileName);
			uploadFile(destFile, file);
			result.put("success", true);
			result.put("message", "文件上传成功!!!");
		}
		return "success";
	}

	public String ActionError(){
		result = new HashMap<String, Object>();
		result.put("success", false);
		result.put("messages", "上传文件超过了限制的大小");
		return "actionError";
	}

	public File getFile() {
		return file;
	}

	public void setFile(File file) {
		this.file = file;
	}

	public String getFileFileName() {
		return fileFileName;
	}

	public void setFileFileName(String fileFileName) {
		this.fileFileName = fileFileName;
	}

	public String getFileContentType() {
		return fileContentType;
	}

	public void setFileContentType(String fileContentType) {
		this.fileContentType = fileContentType;
	}

	public File generateDestFile(String destFileDir, String sourceFileName) {
		File destDir = new File(destFileDir);
		if (!destDir.exists()) {
			destDir.mkdirs();
		}
		// 生成规则
		return new File(destDir, sourceFileName);
	}

	public static void uploadFile(File destFile, File sourceFile) {
		InputStream input = null;
		OutputStream output = null;
		try {
			input = new FileInputStream(sourceFile);
			output = new FileOutputStream(destFile);
			IOUtils.copy(input, output);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			IOUtils.closeQuietly(output);
			IOUtils.closeQuietly(input);
		}
	}

	/**
	 * 判断是否支持上传文件的类型
	 * 
	 * @param types
	 * @return
	 */
	public boolean validateUploadType(String types) {
		String[] allowedTypes = null;
		// 获取文件上传类型
		String fileType = getFileContentType();
		allowedTypes = types.split(",");
		for (String type : allowedTypes) {
			if (type.equals(fileType)) {
				return true;
			}
		}
		return false;
	}

	public boolean validateUploadLength(long maximumSize) {
		if (getFile().length() > maximumSize) {
			return false;
		}
		return true;
	}

	public String getSavePath() {
		return savePath;
	}

	public void setSavePath(String savePath) {
		this.savePath = savePath;
	}

	public long getMaximumSize() {
		return maximumSize;
	}

	public void setMaximumSize(long maximumSize) {
		this.maximumSize = maximumSize;
	}

	public String getAllowedTypes() {
		return allowedTypes;
	}

	public void setAllowedTypes(String allowedTypes) {
		this.allowedTypes = allowedTypes;
	}
}

struts.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<!-- <constant name="struts.custom.i18n.resources" value="ApplicationResources" 
		/> -->
	<package name="default" extends="json-default">
	   <action name="struts2_*" class="org.zsm.learn.struts2.action.FileUploadAction"
		method="{1}">
		 <param name="savePath">/upload</param>
		 <param name="maximumSize">1048576</param>
		 <param name="allowedTypes">
			application/vnd.ms-powerpoint,application/msword
		 </param>
		<!-- 注意结合Action观察struts.xml中result的配置。 contentType参数是一定要有的,
		否则浏览器总是提示将返回的JSON结果另存为文件,不会交给ajaxfileupload处理。这是因 
		为struts2 JSON Plugin默认的contentType为application/json,
		而ajaxfileupload则要求为text/html。 -->
		<result name="success" type="json">
		  <param name="contentType">
			text/html
		  </param>
		  <param name="root">result</param>
		</result>
		<result name="actionError" type="json">
	          <param name="root">result</param>
		  <param name="contentType">
			text/html
		</param>
		</result>
		<result name="input" type="redirect">struts2_ActionError.action</result>
	</action>
	</package>
</struts>

基于struts2的ajaxfileupload异步上传插件的使用

时间: 2024-08-20 10:38:50

基于struts2的ajaxfileupload异步上传插件的使用的相关文章

jquery之ajaxfileupload异步上传插件

来自:http://www.blogjava.net/sxyx2008/archive/2010/11/02/336826.html 由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用Jquery Ajax File Uploader这个组件下载地址:http://www.phpletter.com/download_project_version.php?version_id=6服务器端采用struts2来处理文件上传.所需环境:jquery.jsajaxfileupload.j

struts2 jquery ajaxFileUpload 异步上传文件

一.ajaxFileUpload 实现异步上传文件利用到了ajaxFileUpload.js这个文件,这是别人开发的一个jquery的插件,可以实现文件的上传并能够和struts2框架和好的融合在一起.但是网上的提供的一些ajaxFileUpload.js插件存在一些问题,不能够实现多次点击上传文件,要想再次上传必须重新刷新页面.在网上找了好久才找到真正的解决方案,有些网友给出的解决方案并没有真正的解决问题,不知到什么原因.我的修改: 原文件: var oldElement = $('#' +

【转】JQuery插件ajaxFileUpload 异步上传文件(PHP版)

前几天想在手机端做个异步上传图片的功能,平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错,但是由于手机不支持flash,所以不得不再找一个文件上传插件来用了.后来发现ajaxFileUpload这个插件挺不错,所以就用这个插件来做异步上传文件的效果.网上也有很多对ajaxFileUpload插件的使用的文章,不过我发现没有PHP版,所以这次服务器那边的处理就使用PHP语言来处理. 一.先对ajaxFileUpload插件的语法参数进行讲解 原理:ajaxfileu

jQuery插件之ajaxFileUpload异步上传

介绍 AjaxFileUpload.js 是一个异步上传文件的jQuery插件,原理是创建隐藏的表单和iframe然后用JS去提交,获得返回值. 下载地址: http://files.cnblogs.com/files/kissdodog/ajaxfileupload_JS_File.rar http://zhangzhaoaaa.iteye.com/blog/2123021 属性 语法:$.ajaxFileUpload([options]) url 上传处理程序地址. fileElementI

JQuery插件ajaxFileUpload 异步上传文件(PHP版)

太久没写博客了,真的是太忙了.善于总结,进步才会更快啊.不多说,直接进入主题. 前几天想在手机端做个异步上传图片的功能,平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错,但是由于手机不支持flash,所以不得不再找一个文件上传插件来用了.后来发现ajaxFileUpload这个插件挺不错,所以就用这个插件来做异步上传文件的效果.网上也有很多对ajaxFileUpload插件的使用的文章,不过我发现没有PHP版,所以这次服务器那边的处理就使用PHP语言来处理. 一.

ajaxFileUpload异步上传资源,onchange多次调用问题的解决方案

一.上传文件的做法 1 前端代码 <input id="myfiles" name="myfiles" type="file" onchange="upload();"/> <input type="button" name="btn_abc" onclick="document.getElementById('myfiles').click();"

jQuery插件-ajaxFileUpload异步上传文件

ajaxFileUpload是前两天学习过程中接触到的一个JQ插件,功能很简单,就是实现异步上传文件的功能. 1.语法介绍 $.ajaxFileUpload([setting]); 参数说明: (1)url——执行上传处理的地址: (2)secureuri——是否启用安全提交,默认为false: (3)fileElementId——需要上传<input type=”file”>控件id属性值: (4)data——自定义参数,即需要额外传递的JSON格式数据: (5)type——请求方式,提交自

JQuery插件ajaxFileUpload 异步上传文件

一.先对ajaxFileUpload插件的语法参数进行讲解 原理:ajaxfileupload是通过监听iframe的onload方法来实现, 当从服务端处理完成后,就触发iframe的onload事件调用其绑定的方法,在绑定的方法中获取iframe中服务器返回的数据体(支持的普通文本,json,xml,script, html) 语法:$.ajaxFileUpload([options]) 参数说明: 1,url  上传处理程序地址,也就是我发送给服务器端所要处理上传的地址. 2,fileEl

7 款基于 JavaScript/AJAX 的文件上传插件

本文整理了7款基于JavaScript和AJAX的文件上传插件,这些插件基本上都能实现以下功能: 多文件上传 拖拽操作 实时上传进度 自定义上传限制 希望能为你的开发工作带来帮助. 1.  jQuery File Upload 具有多文件上传.拖拽.进度条和图像预览功能的文件上传插件,支持跨域.分块.暂停恢复和客户端图像缩放.可与任何服务端平台(如PHP.Python.Ruby on Rails.Java.Node.js.Go等)一起使用,支持标准的HTML表单文件上传. 2.  Pixelco