`

struts2 uploadify配合使用,以及处理session丢失问题

 
阅读更多

直接上代码:

jsp页面中:

<div style="margin: 20px;">
			<span>当前最新固件 :</span><label style="margin-left: 10px; color: red;" id="currentFirmware"></label>
		</div>
		<div style="margin: 20px;">
			<p><input type="file" name="firmware" id="firmware" /></p><!-- 注意name的写法 -->
			<p style="margin: 20px 0px 0px 15px;"> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-upload'" onclick="doUpload();">上 传 固 件</a> (上传固件到服务器,并不更新网关)</p>
			<p style="margin: 20px 0px 0px 15px;"> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-update'" onclick="updateGateway();">更 新 固 件</a> (把服务器上最新的固件远程更新到网关)</p>
		</div>

 

js:

var path = '<%=request.getContextPath()%>';
			var sessionId = '<%=request.getSession().getId()%>';

 

$(function() {
	$('#firmware').uploadify( {
		'buttonText' : '选 择 固 件',
		'fileObjName' : 'firmware', // 需和input的name,以及struts2中的三个文件上传属性一致
		'swf' : path + '/js/uploadify/uploadify.swf',
		'uploader' : path + '/doUpload.action', // 必须全路径  uploadPorcessServlet
		'multi' : false,
		'auto' : false,
		'fileTypeDesc' : '固件',
		'fileTypeExts' : '*.bin',
		'formData' : {
			'sessionId' : sessionId
		},// sessionId用于解决session丢失的问题
		'fileSizeLimit' : '10240KB',
		'removeCompleted' : false,
		'onUploadSuccess' : function(file, data, response) {
			//alert('The file ' + file.name + ' was successfully uploaded with a response of ' + response + ':' + data);
		if (data != null && data != '' && data != 'null') {
			$.messager.alert('提示信息', data, 'info');
			return;
		} else {
			$.messager.alert('提示信息', '上传成功', 'info');
			//得到最新固件信息
			getNewest();
		}
	}
	});

	//页面初始化时得到服务器上的最新固件
	getNewest();
});

 

java类:

因为新的jdk已不支持通过sessionId得到session,所以要自己写个hashMap,保存session

package com.mhm.dto;

import javax.servlet.http.HttpSession;
import java.util.HashMap;

public class LedSessionContext {
	private static LedSessionContext instance;
	private HashMap<String, HttpSession> sessionMap;

	private LedSessionContext() {
		sessionMap = new HashMap<String, HttpSession>();
	}

	public static LedSessionContext getInstance() {
		if (instance == null) {
			instance = new LedSessionContext();
		}
		return instance;
	}

	public synchronized void AddSession(HttpSession session) {
		if (session != null) {
			sessionMap.put(session.getId(), session);
		}
	}

	public synchronized void DelSession(HttpSession session) {
		if (session != null) {
			sessionMap.remove(session.getId());
		}
	}

	public synchronized HttpSession getSession(String sessionId) {
		if (sessionId == null)
			return null;
		return (HttpSession) sessionMap.get(sessionId);
	}

}

 

监听session的创建以及销毁

package com.mhm.listener;

import java.util.HashMap;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import com.mhm.dto.LedSessionContext;

public class SessionListener implements HttpSessionListener {

	public static HashMap<String, HttpSession> sessionMap = new HashMap<String, HttpSession>();  
	
	private LedSessionContext lsc = LedSessionContext.getInstance();  
	
	@Override
	public void sessionCreated(HttpSessionEvent httpSessionEvent) {
		lsc.AddSession(httpSessionEvent.getSession());  
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
		HttpSession session = httpSessionEvent.getSession();  
		lsc.DelSession(session);
	}
	
}

 

Action:

// =========== 供上传使用的字段,必须和jsp页面一致=============
	private File firmware;
	private String firmwareFileName;
	private String firmwareFileContentType;
	// =========== 供上传使用的字段=============

 

@Action(value = "doUpload", results = { @Result(name = Constants.SUCCESS, type = "json") })
	public String doUpload() {
		log.info("method begin: doUpload()");
		PrintWriter out = null;
		try {
			HttpServletResponse response = getResponse();
			response.setContentType("text/html;charset=UTF-8");
			out = getResponse().getWriter();
			
			
			String sessionId = (String)getRequest().getParameter("sessionId");
			HttpSession session = LedSessionContext.getInstance().getSession(sessionId);
			Userinfo user = (Userinfo)session.getAttribute(LedConstants.LOGINUSER);
			
			if (user == null) {
				rtnMsg = "用户未登录或登录已超时。上传失败";
				out.print(rtnMsg);
				out.flush();
				out.close();
			} else {
				String path = getRequest().getSession().getServletContext().getRealPath("/upload");
				System.out.println("path : " + path);
				
				// 对文件类型过滤赞不考虑
				
				if (firmware != null) {
					StringBuilder newFileName = new StringBuilder();
					int dotPos = firmwareFileName.indexOf(".");
					String fName = firmwareFileName.substring(0, dotPos);
					
					newFileName.append(fName)
					.append("-")
					.append(UUID.randomUUID())
					.append(firmwareFileName.substring(dotPos));
					
		            File savefile = new File(new File(path), newFileName.toString());
		            
		            if (!savefile.getParentFile().exists()) {
		                savefile.getParentFile().mkdirs();
		            }
		            
					FileUtils.copyFile(firmware, savefile);
					
					
					// 上传信息存入数据库
					Uploadfile entity = new Uploadfile();
					entity.setFname(newFileName.toString());
					entity.setOriginalName(firmwareFileName);
					entity.setFilePath(path + "\\" + newFileName.toString());
					entity.setType(Constants.INT_VALUE1);
					entity.setFlag(Constants.INT_VALUE1);
					entity.setCreateDate(getNowTimestamp());
					entity.setCreateUser(user.getUserId());
					
					uploadFileMng.save(entity);
					out.print("");
					out.flush();
					out.close();
				}
	        }
		} catch (IOException ex) {
			log.error("doUpload()", ex);
			rtnMsg = ex.getLocalizedMessage();
			out.print(rtnMsg);
			out.flush();
			out.close();
		}
		log.info("method begin: doUpload()");
		return SUCCESS;
	}

 

 

 

 

分享到:
评论

相关推荐

    Struts2uploadify3.1

    1. **引入依赖**:在项目中添加Uploadify的JavaScript库和CSS文件,以及Struts2相关的jar包。 2. **配置Action**:创建一个处理文件上传的Struts2 Action,该Action需要处理上传请求,并保存上传的文件。 3. **编写...

    struts2 +jquey uploadify3.2 实现多文件上传

    struts2 +jquey uploadify3 2 实现多文件上传 可以运行的myeclipse工程 绝对好用 访问方式http: 127 0 0 1:8080 Struts2Uploadify upload jsp uploadify 使用说明: &lt;a href &quot;javascript:$ &quot;#file ...

    struts1 uploadify 多文件上传

    综上所述,集成Struts1和Uploadify实现多文件上传涉及前端页面的配置、后端动作类的编写、以及Struts1配置文件的更新。通过这种方式,用户可以选择多个文件进行异步上传,同时在服务器端处理这些文件。在实际应用中...

    Uploadify结合Struts2上传demo

    用户可以通过Uploadify选择文件并上传,Struts2后台接收文件并进行处理。在实际开发中,你可能还需要处理文件大小限制、类型检查、错误处理等问题,以确保上传功能的健壮性和安全性。同时,随着技术的发展,现代...

    uploadify3与struts2结合实现有进度条文件上传实例

    毕竟是第一次用 不是很熟悉 希望有人发现问题可以交流一下"&gt;这是根据uploadify3 2结合struts2搭建的文件上传环境 可以直接导入eclipse运行 每步实现基本都加了注释 以下是我碰到的问题: 1 判断session是否失效 ...

    struts2 uploadify 上传图片

    在Struts2中集成Uploadify,可以创建一个强大的图片上传系统,允许用户方便地上传图片到服务器,并将这些图片保存到指定的路径。以下是关于如何实现这个功能的详细步骤和关键知识点: 1. **环境准备**: - 首先...

    Struts2+uploadify上传文件

    Struts2和Uploadify是两种在Web开发中用于文件上传的技术。Struts2是一个基于MVC(模型-视图-控制器)设计模式的Java Web框架,它提供了强大的表单处理和动作调度功能。Uploadify则是一个JavaScript库,利用Flash...

    火狐下uploadify上传丢失session解决(jsp,java)

    解决uploadify上传火狐浏览器下丢失session Flash上传丢失session

    struts2_uploadify带进度条的多文件上传下载

    Struts2 Uploadify是一个在Java Web开发中常用的插件,它结合了Struts2框架和Uploadify jQuery插件,能够实现文件的多选、上传进度显示以及后台处理等功能。这个项目示例提供了一个完整的解决方案,使得用户在上传多...

    uploadify+struts2多文件上传

    代码使用Struts2框架和uploadify插架实现多文件上传功能。

    struts2+uploadify(2.1.4)的文件上传

    此外,优化上传性能,如使用异步上传、分片上传,以及合理设置服务器的文件处理和存储策略。 6. **Struts2与Ajax整合**:Uploadify的异步上传与Struts2的Ajax支持相结合,可以提供流畅的用户体验。你需要确保Struts...

    struts2+uploadify小李子

    Struts2和Uploadify是两种在Web开发中用于处理文件上传功能的技术。Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它提供了一种结构化的方式来组织和控制应用程序的流程。Uploadify则是一...

    Struts2实现Uploadify多文件上传

    如果前后端部署在不同的域名下,还需要处理跨域问题,可能需要在Struts2或服务器端设置CORS策略。 通过以上步骤,我们可以利用Struts2和Uploadify实现多文件上传功能,为用户提供友好的上传体验,同时确保服务器端...

    struts2结合uploadify上传进度条

    这包括在项目中引入Struts2的核心库,以及配置struts.xml文件,定义Action类和结果类型。 1. **集成Uploadify**: - 在你的Web应用中引入Uploadify的JavaScript和CSS文件。通常,它们位于Uploadify的lib目录下。 ...

    struts2 jquery.uploadify

    Struts2 jQuery Uploadify是一个整合了Struts2框架与jQuery Uploadify插件的示例项目,主要用于实现文件上传的功能。这个简单的demo展示了如何在Struts2应用中集成jQuery Uploadify,以便提供用户友好的、多文件异步...

    uploadify struts2实现图片上传

    本篇文章将深入探讨如何使用uploadify这款jQuery插件与Struts2框架结合,实现图片的上传功能。 首先,uploadify是一款强大的前端文件上传插件,它基于JavaScript库jQuery,提供了丰富的自定义选项和友好的用户界面...

    uploadify+struts2多文件上传实例

    总的来说,`uploadify+Struts2`的多文件上传实例提供了一种有效的解决策略,尤其是在处理浏览器兼容性和session问题上。通过深入理解和实践这些技术,开发者可以构建更加稳定、高效的文件上传功能。

    Uploadify Struts2 上传实现

    【标题】"Uploadify Struts2 上传实现"涉及到的是在Java Web开发中,使用Uploadify插件结合Struts2框架来实现文件上传的功能。Uploadify是一款基于jQuery的前端文件上传插件,它允许用户通过异步方式上传多个文件,...

    解决uploadify用法时session发生丢失问题的方法_.docx

    在使用Uploadify插件进行文件上传时,可能会遇到一个常见的问题,即Session丢失。Uploadify是一个基于Flash的文件上传组件,它允许用户批量上传文件,但在处理过程中可能会与服务器端的Session管理机制产生冲突,...

    解决uploadify使用时session发生丢失问题的方法

    今天在使用uploadify时发现session会发生丢失的情况,经过一番研究发现,其丢失并不是真正的丢失,而是在使用Flash上传控件的时候使用的session机制和asp.net中的不相同。为解决这个问题使用两种方案,下面进行介绍 ...

Global site tag (gtag.js) - Google Analytics