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

step-by-step多文件WEB批量上传(swfupload)的完美解决方案

    博客分类:
  • java
阅读更多
★★★ 本篇为原创,需要引用转载的朋友请注明:《 http://stephen830.iteye.com/blog/255583 》 谢谢支持! ★★★

功能完全支持ie和firefox浏览器!同样也支持safari浏览器!

一般的WEB方式文件上传只能一个一个的进行上传,在某些应用上就显得很不人性化,客户们都希望能够1次选择很多文件,然后让系统把选择的文件全部上传。

这里,就将针对这个问题提出一个比较完美的解决方案,利用的技术主要有2个:Flash 和 smartupload。Flash 能够让客户一次选择多个文件,而smartupload负责将选择的文件上传到服务器上。

有些朋友看到这里,就知道了,其实就是swfupload方法,具体信息可以访问swfupload官方网站:http://www.swfupload.org/

让我们先来看看客户端的界面效果图。(多选文件,批量上传,上传进度显示)



要做到图中的效果,其实很方便,看完下面的描述,相信大家都可以实现上图中的效果了。
说明:swfupload2中通过一个png图片与flash插件进行关联,可以修改images下的png图片来(如上图中的[选择文件]图片)自定义显示自己想要的图片样子(不要修改图片名字和格式)。

如果你用的不是java环境,不要紧,只要稍作修改,同样可以使用在其他的环境中。

第1步,要进行下面的过程,必须先准备好Flash插件和smartupload。
Flash插件:相信大家的浏览器早已经安装过了,请检查版本,尽量使用最新的的flash插件。

smartupload:大家可以去看看我的另一篇文章 [上传下载组件SmartUpload使用方法] http://stephen830.iteye.com/blog/255010 里面详细讲述了使用方法,并且提供了具体java类的下载。请先熟悉smartupload,然后再开始下面的步骤。

第2步,前台部分准备客户操作的WEB界面,如下[UploadFileExample.jsp、UploadFileExampleSubmit.jsp]


(关于参数 upload_url: "<%=uploadUrl.toString()%>",
要注意提交文件路径,最好用http://.../UploadFileExample.jsp格式的完整路径,即像我例子中写的那样)


UploadFileExample.jsp
<%@ page contentType="text/html;charset=UTF-8"%>
<%
    double perMaxSize = 1.5;//单个文件允许的max大小
    String sizeUnit = "MB";//perMaxSize数据对应的单位
    String ext = "*.jpg;*.jpeg;*.gif";//允许上传的文件类型
    //文件上传提交的目标页面
	StringBuffer uploadUrl = new StringBuffer("http://");
	uploadUrl.append(request.getHeader("Host"));
	uploadUrl.append(request.getContextPath());
	uploadUrl.append("/admin/swfuploadexample/UploadFileExampleSubmit.jsp");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>批量相片上传</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="css/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/swfupload.js"></script>
<script type="text/javascript" src="js/swfupload.swfobject.js"></script>
<script type="text/javascript" src="js/swfupload.queue.js"></script>
<script type="text/javascript" src="js/fileprogress.js"></script>
<script type="text/javascript" src="js/handlers.js"></script>

<script type="text/javascript">
var swfu;

SWFUpload.onload = function () {
	var settings = {
		flash_url : "js/swfupload.swf",
		upload_url: "<%=uploadUrl.toString()%>",
		post_params: {
			"user_id" : "stephen830",
			"pass_id" : "123456"
		},
		file_size_limit : "<%=perMaxSize%> <%=sizeUnit%>",
		file_types : "<%=ext%>",
		file_types_description : "<%=ext%>",
		file_upload_limit : 100,
		file_queue_limit : 0,
		custom_settings : {
			progressTarget : "fsUploadProgress",
			cancelButtonId : "btnCancel",
			uploadButtonId : "btnUpload",
			myFileListTarget : "idFileList"
		},
		debug: false,
		auto_upload:false,

		// Button Settings
		button_image_url : "images/XPButtonUploadText_61x22.png",	// Relative to the SWF file
		button_placeholder_id : "spanButtonPlaceholder",
		button_width: 61,
		button_height: 22,

		// The event handler functions are defined in handlers.js
		swfupload_loaded_handler : swfUploadLoaded,
		file_queued_handler : fileQueued,
		file_queue_error_handler : fileQueueError,
		file_dialog_complete_handler : fileDialogComplete,
		upload_start_handler : uploadStart,
		upload_progress_handler : uploadProgress,
		upload_error_handler : uploadError,
		upload_success_handler : uploadSuccess,
		upload_complete_handler : uploadComplete,
		queue_complete_handler : queueComplete,	// Queue plugin event
		
		// SWFObject settings
		minimum_flash_version : "9.0.28",
		swfupload_pre_load_handler : swfUploadPreLoad,
		swfupload_load_failed_handler : swfUploadLoadFailed
	};

	swfu = new SWFUpload(settings);
}

</script>
</head>
<body bgcolor="#FCFCFC" topmargin="0px" leftmargin="10px" rightmargin="10px" scroll="yes">
<table width="100%" cellspacing="4" cellpadding="4" border="0" bgcolor="#FCFCFC">
	<tr> 
	<td class="DH1">
	<table width="100%" cellspacing="4" cellpadding="4" border="0" bgcolor="#FCFCFC">
	<tr>
	<td class="DH2">
	<STRONG>批量上传相片 (支持的相片类型:<%=ext%>;单个相片最大不能超过:<%=perMaxSize%> <%=sizeUnit%>)</STRONG> 
	</td><td class="DH2" align="right"></td>
	</tr>
	</table>
<div id="content">
	<form id="form1" action="UploadFileExampleSubmit.jsp" method="post" enctype="multipart/form-data">
		<table width="90%" cellspacing="0" cellpadding="0" border="0"><tr><td>
		<span id="spanButtonPlaceholder"></span>
		<input id="btnUpload" type="button" value="上传相片" class="btn" />
		<input id="btnCancel" type="button" value="取消全部上传" disabled="disabled" class="btn" /></td>
		</tr></table>
		<table id="idFileList" class="uploadFileList"><tr class="uploadTitle"><td><B>文件名</B></td><td><B>文件大小</B></td><td width=100px><B>状态</B></td><td width=35px>&nbsp;</td></tr></table>
		等待上传 <span id="idFileListCount">0</span> 个 ,成功上传 <span id="idFileListSuccessUploadCount">0</span> 个
		<div id="divSWFUploadUI" style="visibility: hidden;"></div>
		<noscript style="display: block; margin: 10px 25px; padding: 10px 15px;">
			很抱歉,相片上传界面无法载入,请将浏览器设置成支持JavaScript。
		</noscript>
		<div id="divLoadingContent" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">
			相片上传界面正在载入,请稍后...
		</div>
		<div id="divLongLoading" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">
			相片上传界面载入失败,请确保浏览器已经开启对JavaScript的支持,并且已经安装可以工作的Flash插件版本。
		</div>
		<div id="divAlternateContent" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">
			很抱歉,相片上传界面无法载入,请安装或者升级您的Flash插件。
			请访问: <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" target="_blank">Adobe网站</a> 获取最新的Flash插件。
		</div>
	</form>
</div>
</td></tr></table>
</body>
</html>




UploadFileExample.jsp对应的处理页面 --> UploadFileExampleSubmit.jsp

(1)请确保已经看完我的另一篇文章(上传下载组件SmartUpload使用方法 http://stephen830.iteye.com/admin/blogs/255010),先搞好这个才能开始下面的操作
(2)写一个对应上传方法类,com.soft4j.bo.PhotoMgr.java,其中的方法就是文章下面提到的public static String fileUpload(SmartUpload su,PageContext pageContext) throws Exception {...}

这2点弄好了,ok,可以继续。(如果没有准备java文件,下面的UploadFileExampleSubmit.jsp会报错)

注意在(UploadFileExampleSubmit.jsp)中:上传成功后必须返回“successed”,失败的话则返回失败的原因。

<%@ page contentType="text/html;charset=UTF-8"%><%@ page import="com.soft4j.httpupload4j.SmartUpload"%><%@ page import="com.soft4j.bo.PhotoMgr"%><%
	String pageErrorInfo = null;
	SmartUpload su = null;
	try{
		su = new SmartUpload();
		su.initialize(pageContext);
		su.upload();
		pageErrorInfo = PhotoMgr.fileUpload(su,pageContext);
		if(pageErrorInfo==null){
			out.print("successed");
		}
	}catch(Exception e){
		pageErrorInfo = e.getMessage();
	}finally{
		su = null;
		if(pageErrorInfo!=null){
			out.print(pageErrorInfo);
		}
	}
%>



第3步 准备后台的文件上传功能。也就是上面文件[UploadFileExampleSubmit.jsp]中用到的[PhotoMgr.fileUpload(su,pageContext)]方法。

/**
	 * 文件上传方法.
	 * @param su
	 * @param pageContext
	 * @return
	 * @throws Exception
	 */
	public static String fileUpload(SmartUpload su,PageContext pageContext) throws Exception {
	    com.soft4j.httpupload4j.File suFile = null;
	    int fileCount = 0;
	    try {
	    	//获取传递过来的参数
	    	String userId = su.getRequest().getParameter("user_id");
	    	String passId = su.getRequest().getParameter("pass_id");

	        String fileExt = "";
	        int fileSize = 0;
	        String AllowedExtensions = ",jpg,jpeg,gif,";//允许上传的文件类型
	        double maxFileSize = 1.5*1024;//单文件最大大小,单位KB
	        //校验文件类型和大小
	        for (int i=0; i<su.getFiles().getCount();i++) {
	            suFile = su.getFiles().getFile(i);
	            if (suFile.isMissing())
	                continue;
	            //校验文件大小
	            fileSize = suFile.getSize()/1024;//字节转换成KB
	            if(fileSize==0) fileSize=1;
	            if(maxFileSize<fileSize) throw new Exception("单个上传相片的容量不能超过["+maxFileSize+"KB]");
	
	            //校验文件类型
	            if (suFile.getFileExt() == null
	                    || "".equals(suFile.getFileExt())) {
	                fileExt = ",,";
	            } else {
	                fileExt = "," + suFile.getFileExt().toLowerCase() + ",";
	            }
	            if (!"".equals(AllowedExtensions)
	                    && AllowedExtensions.indexOf(fileExt) == -1) {
	                throw new Exception("您上传的文件[" + suFile.getFileName()
	                        + "]的类型为系统禁止上传的文件类型,不能上传!");
	            }
	            fileCount++;
	        }
	        if (fileCount==0) throw new Exception("请选择上传的文件");
	        //准备保存文件
	        String filePath="D:\\tomcat\\webapps\\test\\photo\\";//这里填写项目中存放上传文件的物理路径
	        for (int i=0; i<su.getFiles().getCount();i++) {
	            suFile = su.getFiles().getFile(i);
	            suFile.saveAs(filePath+suFile.getFileName(),SmartUpload.SAVE_PHYSICAL);//保存文件
	        }
	        //成功返回null
	        return null;
	    } finally {
	    	//
	    }
	}


备注:关于jsp页面和java方法我不做过多的说明了,应该已经比较清楚了。

本文自发布后,受到了很多朋友的关注,也为不少的朋友提供了帮助,我很高兴。
下面将朋友们遇到的一些问题作汇总后需要注意的一些地方列了出来:

<1> 功能实现需要flash插件支持。
flash版本为 flash 9.0.124 或者 flash 10.0.12.36 版本(这是最新的flash10插件). 如果不是的话,可以去flash官网 http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash 进行在线安装。


<2> UploadFileExample.jsp 中的 upload_url参数设置。
参数需要使用 http://....../UploadFileExampleSubmit.jsp 这样的完整路径.

<3> 关于获取参数 post_params中的参数值。
post_params: {"user_id" : "stephen830","pass_id" : "123456"} 中的参数,不能使用普通的request.getParameter("")方法来获取,
而必须用你的上传方法对应的特定方法来获取,比如,我这里用smartupload,则获取方法就是String userId = su.getRequest().getParameter("user_id");

<4> 上传后不管成功还是失败,都需要有返回值。
这个返回值将传递到对应js中。返回值在UploadFileExampleSubmit.jsp中设置,成功则 out.print("successed"); 失败则 out.print(pageErrorInfo);//pageErrorInfo为错误信息。

该返回值将传递给js目录下的handlers.js文件,具体的方法是 function uploadSuccess(file, serverData) {...} 。

有些朋友的上传成功后out.print("successed"); 发现js收到的"successed"前面会有隐藏字符,遇到这种情况可以更改function uploadSuccess(file, serverData) {...} 中的
var isSuccess = (serverData.indexOf("successed")==0?true:false);
改为
var isSuccess = (serverData.indexOf("successed")>-1?true:false);
就可以了。

<5> 附件中增加一个完整的测试功能例子。
附件名 PROJECT_swfupload.zip 下载 http://stephen830.iteye.com/upload/attachment/53105/e0e90839-a760-3adb-acdd-aa3b972d090c.zip


附录:swfupload 文件批量上传压缩包 swfupload.zip(支持最新的flash10插件) (附件中没有java类,请自己准备1个java类,将上面的方法复制进去)

为方便了解和调试功能,在附件中增加了一个完整的工程Example,附件名(PROJECT_swfupload.zip),大家可以直接使用来测试功能。

最后感谢朋友 flyfan,taiwei 对本篇的建议!
-------------------------------------------------------------
分享知识 分享快乐,分享知识,分享快乐,希望文章能给需要的朋友带来小小的帮助。
  • 大小: 18.5 KB
64
4
分享到:
评论
73 楼 springfeel 2008-11-24  
为什么提示我:上传失败: 请选择上传的文件
72 楼 stephen830 2008-11-24  
大力水手 写道

stephen830 写道
大力水手 写道 大力水手 写道 stephen830 写道 大力水手 写道 post_params: { "user_id" : "stephen830", "pass_id" : "123456" }, lz 你好,我参数传递到后台用request.getParameter("user_id") 获取不到值会是什么原因啊? 应该是 upload_url参数的问题, "UploadFileExampleSubmit.jsp" 改成你系统的 http://..../UploadFileExampleSubmit.jsp flash_url : "images/swfupload.swf", upload_url: "http://localhost:8888/swfUpLoad/upLoadPhoto.do", post_params: { "photoSort" : "11111111" }, 我是这样写的,后台struts 能得到上传的文件 但就是request.getParameter("photoSort")&amp;amp;amp;nbsp; 得不到值 为null Java代码 public&amp;amp;nbsp;ActionForward&amp;amp;nbsp;upLoadPhoto(ActionMapping&amp;amp;nbsp;mapping,&amp;amp;nbsp;ActionForm&amp;amp;nbsp;form,HttpServletRequest&amp;amp;nbsp;request,&amp;amp;nbsp;HttpServletResponse&amp;amp;nbsp;response)&amp;amp;nbsp;{ &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;try&amp;amp;nbsp;{ &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;IPhotoManager&amp;amp;nbsp;photoManager&amp;amp;nbsp;=&amp;amp;nbsp;(IPhotoManager)&amp;amp;nbsp;getBean("photoManage"); &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;photoManager.upLoadPhoto(request); &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;}&amp;amp;nbsp;catch&amp;amp;nbsp;(Exception&amp;amp;nbsp;ex)&amp;amp;nbsp;{ &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;ex.printStackTrace(); &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;} &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;return&amp;amp;nbsp;null; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;}&amp;amp;nbsp;&amp;amp;nbsp;public ActionForward upLoadPhoto(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) { try { IPhotoManager photoManager = (IPhotoManager) getBean("photoManage"); photoManager.upLoadPhoto(request); } catch (Exception ex) { ex.printStackTrace(); } return null; } 这个就是我的上传的类action 在struts 的action 里面request.getParameter("photoSort")因该是能取得参数的啊 这样子是没有办法取得参数的,带文件上传使用的都是enctype="multipart/form-data" 方式,不能用普通的getParameter方法来获取参数。如果你使用的也是smartupload来负责传文件的话,应该像我那个jsp中的代码一样 Html代码 su&amp;nbsp;=&amp;nbsp;new&amp;nbsp;SmartUpload();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;su.initialize(pageContext);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;su.upload();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pageErrorInfo&amp;nbsp;=&amp;nbsp;PhotoMgr.fileUpload(su,pageContext);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(pageErrorInfo==null){&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;out.print("successed");&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;su = new SmartUpload();&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; su.initialize(pageContext);&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; su.upload();&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pageErrorInfo = PhotoMgr.fileUpload(su,pageContext);&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(pageErrorInfo==null){&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.print("successed");&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; 由smartupload来负责接收请求,然后才能用smartupload提供的String userId = su.getRequest().getParameter("user_id");&amp;nbsp;&amp;nbsp; 来取得参数。 感谢lz的提示,搞定了。swfupload是以二进制方式上传所以在action里面request().getParameter("photoSort")是获取不到值的,可以通过使用apache的common-fileupload获得


 
71 楼 大力水手 2008-11-24  
stephen830 写道

大力水手 写道
大力水手 写道 stephen830 写道 大力水手 写道 post_params: { "user_id" : "stephen830", "pass_id" : "123456" }, lz 你好,我参数传递到后台用request.getParameter("user_id") 获取不到值会是什么原因啊? 应该是 upload_url参数的问题, "UploadFileExampleSubmit.jsp" 改成你系统的 http://..../UploadFileExampleSubmit.jsp flash_url : "images/swfupload.swf", upload_url: "http://localhost:8888/swfUpLoad/upLoadPhoto.do", post_params: { "photoSort" : "11111111" }, 我是这样写的,后台struts 能得到上传的文件 但就是request.getParameter("photoSort")&amp;amp;nbsp; 得不到值 为null Java代码 public&amp;nbsp;ActionForward&amp;nbsp;upLoadPhoto(ActionMapping&amp;nbsp;mapping,&amp;nbsp;ActionForm&amp;nbsp;form,HttpServletRequest&amp;nbsp;request,&amp;nbsp;HttpServletResponse&amp;nbsp;response)&amp;nbsp;{ &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{ &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IPhotoManager&amp;nbsp;photoManager&amp;nbsp;=&amp;nbsp;(IPhotoManager)&amp;nbsp;getBean("photoManage"); &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;photoManager.upLoadPhoto(request); &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(Exception&amp;nbsp;ex)&amp;nbsp;{ &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ex.printStackTrace(); &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;null; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;public ActionForward upLoadPhoto(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) { try { IPhotoManager photoManager = (IPhotoManager) getBean("photoManage"); photoManager.upLoadPhoto(request); } catch (Exception ex) { ex.printStackTrace(); } return null; } 这个就是我的上传的类action 在struts 的action 里面request.getParameter("photoSort")因该是能取得参数的啊 这样子是没有办法取得参数的,带文件上传使用的都是enctype="multipart/form-data" 方式,不能用普通的getParameter方法来获取参数。如果你使用的也是smartupload来负责传文件的话,应该像我那个jsp中的代码一样


Html代码

su&nbsp;=&nbsp;new&nbsp;SmartUpload();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su.initialize(pageContext);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su.upload();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageErrorInfo&nbsp;=&nbsp;PhotoMgr.fileUpload(su,pageContext);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(pageErrorInfo==null){&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print("successed");&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;su = new SmartUpload();  
        su.initialize(pageContext);  
        su.upload();  
        pageErrorInfo = PhotoMgr.fileUpload(su,pageContext);  
        if(pageErrorInfo==null){  
            out.print("successed");  
        }  由smartupload来负责接收请求,然后才能用smartupload提供的String userId = su.getRequest().getParameter("user_id");&nbsp;&nbsp; 来取得参数。



感谢lz的提示,搞定了。swfupload是以二进制方式上传所以在action里面request().getParameter("photoSort")是获取不到值的,可以通过使用apache的common-fileupload获得
70 楼 stephen830 2008-11-24  
大力水手 写道

大力水手 写道
stephen830 写道 大力水手 写道 post_params: { "user_id" : "stephen830", "pass_id" : "123456" }, lz 你好,我参数传递到后台用request.getParameter("user_id") 获取不到值会是什么原因啊? 应该是 upload_url参数的问题, "UploadFileExampleSubmit.jsp" 改成你系统的 http://..../UploadFileExampleSubmit.jsp flash_url : "images/swfupload.swf", upload_url: "http://localhost:8888/swfUpLoad/upLoadPhoto.do", post_params: { "photoSort" : "11111111" }, 我是这样写的,后台struts 能得到上传的文件 但就是request.getParameter("photoSort")&amp;nbsp; 得不到值 为null


Java代码

public&nbsp;ActionForward&nbsp;upLoadPhoto(ActionMapping&nbsp;mapping,&nbsp;ActionForm&nbsp;form,HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;{ &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPhotoManager&nbsp;photoManager&nbsp;=&nbsp;(IPhotoManager)&nbsp;getBean("photoManage"); &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;photoManager.upLoadPhoto(request); &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex)&nbsp;{ &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace(); &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null; &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;public ActionForward upLoadPhoto(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
try {
IPhotoManager photoManager = (IPhotoManager) getBean("photoManage");
photoManager.upLoadPhoto(request);
} catch (Exception ex) {
ex.printStackTrace();
}

return null;
}
这个就是我的上传的类action 在struts 的action 里面request.getParameter("photoSort")因该是能取得参数的啊


这样子是没有办法取得参数的,带文件上传使用的都是enctype="multipart/form-data" 方式,不能用普通的getParameter方法来获取参数。如果你使用的也是smartupload来负责传文件的话,应该像我那个jsp中的代码一样
su = new SmartUpload();   
        su.initialize(pageContext);   
        su.upload();   
        pageErrorInfo = PhotoMgr.fileUpload(su,pageContext);   
        if(pageErrorInfo==null){   
            out.print("successed");   
        }  

由smartupload来负责接收请求,然后才能用smartupload提供的String userId = su.getRequest().getParameter("user_id");   来取得参数。

69 楼 大力水手 2008-11-24  
大力水手 写道

stephen830 写道
大力水手 写道 post_params: { "user_id" : "stephen830", "pass_id" : "123456" }, lz 你好,我参数传递到后台用request.getParameter("user_id") 获取不到值会是什么原因啊? 应该是 upload_url参数的问题, "UploadFileExampleSubmit.jsp" 改成你系统的 http://..../UploadFileExampleSubmit.jsp flash_url : "images/swfupload.swf", upload_url: "http://localhost:8888/swfUpLoad/upLoadPhoto.do", post_params: { "photoSort" : "11111111" }, 我是这样写的,后台struts 能得到上传的文件 但就是request.getParameter("photoSort")&nbsp; 得不到值 为null

public ActionForward upLoadPhoto(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
	try {
		IPhotoManager photoManager = (IPhotoManager) getBean("photoManage");
			photoManager.upLoadPhoto(request);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		
		return null;
	}


这个就是我的上传的类action 在struts 的action 里面request.getParameter("photoSort")因该是能取得参数的啊
68 楼 stephen830 2008-11-24  
大力水手 写道

stephen830 写道
大力水手 写道 post_params: { "user_id" : "stephen830", "pass_id" : "123456" }, lz 你好,我参数传递到后台用request.getParameter("user_id") 获取不到值会是什么原因啊? 应该是 upload_url参数的问题, "UploadFileExampleSubmit.jsp" 改成你系统的 http://..../UploadFileExampleSubmit.jsp flash_url : "images/swfupload.swf", upload_url: "http://localhost:8888/swfUpLoad/upLoadPhoto.do", post_params: { "photoSort" : "11111111" }, 我是这样写的,后台struts 能得到上传的文件 但就是request.getParameter("photoSort")&nbsp; 得不到值 为null

不能直接用request.getParameter("photoSort")来取得参数,需要根据你所用的上传组件(负责上传的类)中的获取参数方法。比如我用的是smartupload,就用 String userId = su.getRequest().getParameter("user_id");来获取参数,你需要根据自己的上传类来获取参数。
67 楼 大力水手 2008-11-24  
stephen830 写道

大力水手 写道
post_params: { "user_id" : "stephen830", "pass_id" : "123456" }, lz 你好,我参数传递到后台用request.getParameter("user_id") 获取不到值会是什么原因啊? 应该是 upload_url参数的问题, "UploadFileExampleSubmit.jsp" 改成你系统的 http://..../UploadFileExampleSubmit.jsp

flash_url : "images/swfupload.swf",
upload_url: "http://localhost:8888/swfUpLoad/upLoadPhoto.do",
post_params: {
"photoSort" : "11111111"
},

我是这样写的,后台struts 能得到上传的文件 但就是request.getParameter("photoSort")  得不到值 为null
66 楼 stephen830 2008-11-24  
大力水手 写道

post_params: { "user_id" : "stephen830", "pass_id" : "123456" }, lz 你好,我参数传递到后台用request.getParameter("user_id") 获取不到值会是什么原因啊?

应该是 upload_url参数的问题, "UploadFileExampleSubmit.jsp" 改成你系统的 http://..../UploadFileExampleSubmit.jsp
65 楼 大力水手 2008-11-24  
post_params: {
"user_id" : "stephen830",
"pass_id" : "123456"
},

lz 你好,我参数传递到后台用request.getParameter("user_id") 获取不到值会是什么原因啊?
64 楼 stephen830 2008-11-23  
大力水手 写道

upload_url: "UploadFileExampleSubmit.jsp", post_params: { "user_id" : "stephen830", "pass_id" : "123456" }, lz 你好,这样写值能传到后台去。我有一个下拉框 在我点上传前已经选择了一个值 当我把这个下拉框的值传到后台去的时候得到的是下拉框的默认值,而不是我之前选择的值?这是为什么啊?


upload_url: "UploadFileExampleSubmit.jsp" 改成你系统的 http://..../UploadFileExampleSubmit.jsp

参数用post_params中处理,必须将你的下拉框的值放在post_params中的参数中。
63 楼 大力水手 2008-11-23  
upload_url: "UploadFileExampleSubmit.jsp",
post_params: {
"user_id" : "stephen830",
"pass_id" : "123456"
},
lz 你好,这样写值能传到后台去。我有一个下拉框 在我点上传前已经选择了一个值 当我把这个下拉框的值传到后台去的时候得到的是下拉框的默认值,而不是我之前选择的值?这是为什么啊?
62 楼 大力水手 2008-11-23  
stephen830
stephen830 写道

fei_sd 写道
stephen830 写道fei_sd 写道请问楼主,我上传文件时,文件状态一直停留在蓝色的等待上传状态,其实文件已经上传了,为什么没有返回成功的状态呢?我用的ie,后台用的MultipartHttpServletRequest处理文件上传建议先看看下面朋友的处理过程,他的情况和你一样。检查参数 upload_url: "&amp;amp;lt;%=uploadUrl.toString()%&amp;amp;gt;",要注意提交文件路径,最好用http://.../UploadFileExample.jsp格式的完整路径,即像我例子中写的那样。我没有提交到jsp页处理,直接转给后台了,如果url设置不正确的话,文件应该不会上传啊?!可是我的文件已经上传了,还请楼主帮忙想想是哪里出了问题,谢谢!必须要设置 upload_url ,否则post_params设置的参数没有用的。


请教lz 我有一个下拉框 我上传之前选择了一个值 但是在后台得到的是下拉框默认值而不是我选择的那个值 请问如何解决?
61 楼 stephen830 2008-11-20  
mj4678 写道

Error #2044: 未处理的 IOErrorEvent:。 text=Error #2038: 文件 I/O 错误。 为什么flash 9出现这个呢


请安装最新的flash插件。
60 楼 mj4678 2008-11-20  
Error #2044: 未处理的 IOErrorEvent:。 text=Error #2038: 文件 I/O 错误。
为什么flash 9出现这个呢
59 楼 stephen830 2008-11-19  
kennybee 写道

请检查文件是否全部放上去。
stephen830 写道
kennybee 写道 uncaught exception: Event handler swfupload_pre_load_handler is unknown or is not a function 请检查文件是否全部放上去。 谢谢楼主 刚才发错了! 我想问一下 我现在想做成struts2的异步上传的形式,就是上传完后还能继续选择,应该怎么做。上传页面始终不刷新

这个没有限制,本身就可以的,当前选择的文件上传完后,还可以继续选择文件上传的。
58 楼 kennybee 2008-11-19  
请检查文件是否全部放上去。
stephen830 写道

kennybee 写道
uncaught exception: Event handler swfupload_pre_load_handler is unknown or is not a function 请检查文件是否全部放上去。

谢谢楼主 刚才发错了!
我想问一下 我现在想做成struts2的异步上传的形式,就是上传完后还能继续选择,应该怎么做。上传页面始终不刷新
57 楼 stephen830 2008-11-19  
kennybee 写道

uncaught exception: Event handler swfupload_pre_load_handler is unknown or is not a function


请检查文件是否全部放上去。
56 楼 kennybee 2008-11-19  
uncaught exception: Event handler swfupload_pre_load_handler is unknown or is not a function
55 楼 stephen830 2008-11-07  
lxqssx 写道

FtpClient ftpClient = new FtpClient(); ftpClient.openServer(ftpServer); ftpClient.login(ftpName, ftpPwd); if (ftpFilePath.length() != 0) ftpClient.cd(ftpFilePath); ftpClient.binary(); // 二进制上传 TelnetOutputStream os = ftpClient.put("朱莉1.jpg"); File file_in = new File("d:/朱莉1.jpg"); FileInputStream is = new FileInputStream(file_in); byte[] bytes = new byte[8192]; int c; while ((c = is.read(bytes)) != -1) { os.write(bytes, 0, c); } is.close(); os.close(); ftpClient.closeServer(); 楼主,我想问你一下,我需要获得上传文件的路径名,请问这么获取,我要往FPT上床,红色部分需要全路径名

关于这方面需要你自己去查资料。
路径是指本地还是服务器上的。如果是本地的话,你需要用applet来实现。服务器上的文件路径的话,应该是自己可以配置的。
54 楼 lxqssx 2008-11-07  
FtpClient ftpClient = new FtpClient();
ftpClient.openServer(ftpServer);
ftpClient.login(ftpName, ftpPwd);
if (ftpFilePath.length() != 0)
ftpClient.cd(ftpFilePath);
ftpClient.binary(); // 二进制上传
TelnetOutputStream os = ftpClient.put("朱莉1.jpg");
File file_in = new File("d:/朱莉1.jpg");
FileInputStream is = new FileInputStream(file_in);
byte[] bytes = new byte[8192];
int c;
while ((c = is.read(bytes)) != -1)
{
os.write(bytes, 0, c);
}
is.close();
os.close();
ftpClient.closeServer();



楼主,我想问你一下,我需要获得上传文件的路径名,请问这么获取,我要往FPT上床,红色部分需要全路径名

相关推荐

    step-by-step多文件WEB批量上传(swfupload)的完美解决方案的相关

    本解决方案将详细介绍如何使用SWFUpload实现多文件WEB批量上传的步骤,并解决可能遇到的问题。 首先,SWFUpload是一个开源的JavaScript库,它使用Flash技术来处理文件上传。由于Flash支持拖放和多文件选择,因此...

    SwfUpload(文件批量上传,完美运行,注释丰富)

    SwfUpload 是一款开源的...总的来说,SwfUpload是一个强大且灵活的文件上传解决方案,尤其适用于需要大量处理用户上传文件的网站或应用。其完整的注释和易用性使得它成为开发者们实现批量上传功能的首选工具。

    asp 批量上传 swfupload

    使用这个资源,你可以快速了解如何在ASP项目中整合SWFUpload,进行批量文件上传的实现。 总之,ASP批量上传SWFUpload是结合了Flash技术和ASP服务器端脚本的一种高效文件上传方案,它提供了良好的用户体验,同时需要...

    swfupload批量上传文件

    总结,swfupload作为一个成熟的文件上传解决方案,为批量上传提供了强大的功能和良好的用户体验。然而,随着技术的发展,开发者也需要关注其兼容性问题,适时采用HTML5等新技术来替换或补充。通过与PHP的紧密结合,...

    java 批量 多文件 上传 SwfUpload插件兼容所有浏览器

    java 批量 多文件 上传 SwfUpload插件兼容所有浏览器,火狐需要安装最新的flash reader,压缩包内有最新的flash reader,实例是上传多张图片,只需稍加修改可以上传任何格式的文件,很好看很好用,特意整理出来分享...

    swfupload 批量上传文件

    **SWFUpload 知识点详解** ...通过以上步骤和知识点,你将能够有效地使用SWFUpload实现批量文件上传功能,并在MyEclipse 6.5环境下进行开发和调试。记住,持续优化和测试是确保上传功能稳定性和用户体验的关键。

    swfupload多选批量带进度条文件上传,批量删除

    综上所述,SwfUpload为Web开发者提供了一套高效、直观的文件上传解决方案。它不仅支持多选批量上传和进度显示,还具备缩略图预览和批量删除功能,大大提升了文件管理的便捷性和用户体验。在实际项目中,结合合理的...

    SWFupload_文件批量上传

    综上所述,SWFupload是网页批量文件上传的优秀解决方案,其强大功能和易用性使得它在开发中得到了广泛应用。通过了解其工作原理和集成方式,开发者能够更好地利用这一工具提升用户在上传文件时的体验。

    ASP.NET批量上传SwfUpload-Ext

    总的来说,ASP.NET批量上传SwfUpload-Ext的组合是一种强大的解决方案,它结合了SwfUpload的高效上传能力和ExtJS的丰富交互体验,为用户提供了高效、安全的文件上传体验。在实际开发中,开发者需要根据项目需求灵活...

    SWFUpload多个超大文件上传

    总的来说,SWFUpload提供了一套强大而灵活的工具,使Web开发人员能够优雅地处理大文件上传和多文件批量上传,同时还支持传递额外的参数,增加了上传过程的灵活性。通过理解并正确应用这些概念和技术,我们可以构建出...

    SwfUpload多文件上传

    2. **多文件上传**:SwfUpload的核心功能是支持多个文件的批量上传。用户可以通过选择多个文件来一次性上传,减少了重复操作。 3. **进度条显示**:SwfUpload可以显示上传进度,让用户了解文件上传的状态,提高了...

    SWFUpload批量大文件上传

    SWFUpload是一款经典的JavaScript库,专门用于处理大文件和批量文件的上传。它利用Flash技术在浏览器端提供用户友好的上传界面,同时支持多文件选择和断点续传功能,尤其适用于那些需要处理大量数据或者单个文件体积...

    SWFUpload批量上传图片

    SWFUpload是一款强大的JavaScript与Flash相结合的文件上传组件,它被广泛用于网页中的批量图片上传功能。这个"SWFUpload批量上传图片"的项目是一个基于MyEclipse的工程实例,旨在帮助开发者理解和实现批量上传图片的...

    SwfUpload 多文件上传

    总之,SwfUpload结合Ext.Net为.NET开发者提供了一个高效、可定制的多文件上传解决方案,提高了Web应用的交互性和用户体验。通过熟练掌握这两项技术,开发者可以轻松地构建出满足各种需求的文件上传系统。

    多文件上传swfupload

    SwfUpload结合Java和Struts2框架,提供了一种高效、可定制的多文件上传解决方案。通过前端的SwfUpload配置和后端的Java处理,我们可以实现流畅的上传体验,同时保持对上传文件的有效控制。在实际项目中,还需要考虑...

    swfupload多文件选择上传(WEB) for .Net

    WEB版一次选择多个文件进行批量上传(swfupload)的解决方案 一般的WEB方式文件上传只能使用FileUpload控件进行一个文件一个文件的进行上传,就算是批量上传,也要把文件一个一个的添加到页面,无法如 windows程序...

    SWFUpload上传

    本项目是struts2和swfupload结合,实现单个文件上传、上传后预览(index.jsp),和批量上传(multiple.jsp),里面都有代码注释和一个整理的说明文档(SWFUpload说明文档),讲的非常非常详细,都是本人亲自整理。...

Global site tag (gtag.js) - Google Analytics