- 浏览: 3010603 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (893)
- android (110)
- iphone (198)
- java (79)
- JavaScript手册-目录 (9)
- JavaScript手册-Array (19)
- JavaScript手册-Boolean (5)
- JavaScript手册-Date (50)
- JavaScript手册-Math (30)
- JavaScript手册-Number (14)
- JavaScript手册-RegExp (7)
- JavaScript手册-String (38)
- JavaScript手册-全局函数 (8)
- JavaScript实用脚本 (7)
- Others (21)
- java-jpcap (7)
- java-thread (1)
- ibm文章 (3)
- classloader (2)
- java-filter (2)
- 运行环境 (33)
- java-正则 (2)
- oracle (1)
- linux-shell (26)
- wap (1)
- sqlite (3)
- wow (1)
- jvm (1)
- git (5)
- unity3d (29)
- iap (2)
- mysql (23)
- nginx (14)
- tomcat (9)
- apache (2)
- php (1)
- ubuntu (40)
- rsa (1)
- golang (21)
- appstore (5)
- sftp (2)
- log4j (2)
- netty (18)
- 测试工具 (6)
- memcache (5)
- 设计模式 (1)
- centos (8)
- google_iab (5)
- iOS专题 (4)
- mac (10)
- 安装配置帮助手册 (2)
- im4java_graphicsmagick (5)
- inotify-tools (1)
- erlang (6)
- 微信支付 (1)
- redis (8)
- RabbitMQ (5)
最新评论
-
heng123:
Netty视频教程https://www.douban.com ...
netty4.0.23 初学的demo -
maotou1988:
使用Netty进行Android与Server端通信实现文字发 ...
netty4.0.23 初学的demo -
码革裹尸:
非常感谢,正好用上
android 呼入电话的监听(来电监听) -
rigou:
提示的/222.177.4.242 无法链接到ip地址,是什 ...
通过 itms:services://? 在线安装ipa ,跨过app-store -
duwanbo:
GridView与数据绑定
★★★ 本篇为原创,需要引用转载的朋友请注明:《 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
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”,失败的话则返回失败的原因。
第3步 准备后台的文件上传功能。也就是上面文件[UploadFileExampleSubmit.jsp]中用到的[PhotoMgr.fileUpload(su,pageContext)]方法。
备注:关于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 对本篇的建议!
-------------------------------------------------------------
分享知识 分享快乐,分享知识,分享快乐,希望文章能给需要的朋友带来小小的帮助。
Java代码
var SWFUPLOAD_PHOTO_LIST = ""; // 保存上传文件的id列表
function uploadSuccess(file, serverData) {...
if (serverData && parseInt(serverData) != Math.NaN) {
// 一个文件传输成功
SWFUPLOAD_PHOTO_LIST += ","+serverData;
alert(SWFUPLOAD_PHOTO_LIST);
}
}
var SWFUPLOAD_PHOTO_LIST = ""; // 保存上传文件的id列表
function uploadSuccess(file, serverData) {...
if (serverData && parseInt(serverData) != Math.NaN) {
// 一个文件传输成功
SWFUPLOAD_PHOTO_LIST += ","+serverData;
alert(SWFUPLOAD_PHOTO_LIST);
}
}
获取不到上传的ID,请问老大怎么改?
serverData是返回值,自己定义的,返回值在UploadFileExampleSubmit.jsp中设置。 btw:得到上传的ID想用来做啥呢? 可以用file.id来得到上传文件ID
获取不到上传的ID,请问老大怎么改?
非常强大,找了很久这个是唯一直接发布就可以使用的版本 看了一下唯一的小问题就是上传成功的时候 显示的是 上传失败: successed
引用
有些朋友的上传成功后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); 就可以了。 就解决了 很感谢楼主的劳动!!
好的东西大家一起来用 ,哈哈。
非常强大,找了很久这个是唯一直接发布就可以使用的版本 看了一下唯一的小问题就是上传成功的时候 显示的是
上传失败: successed
就解决了
很感谢楼主的劳动!!
xingjian.gm 写道
我将upload_url: "http://192.168.1.253:8080/SmartUpload/UploadFileExampleSubmit.jsp" 更改成http://192.168.1.253:8080/action/UploadFilesSubmit.do,换句话说,我将UploadFileExampleSubmit.jsp中的内容写在struts的action中,在IE下执行是没问题的,但是在火狐下不知道为什么总是不能执行这个文件,我设置的端点也无效,但是在IE下这个文件就可以正常走下了。请问可以帮忙解决吗?谢谢。 UploadFilesSubmit.java文件 public Object onPostBack(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { response.reset(); response.setContentType("text/xml; charset=utf-8"); PrintWriter out = response.getWriter(); String pageErrorInfo = null; FilesUpload su = null; try{ su = new FilesUpload(); su.initialize(request,response); su.upload(); pageErrorInfo = FilesUploadFTP.fileUpload(su,request,response); if(pageErrorInfo==null){ out.print("uploadFilesSuccess"); } }catch(Exception e){ pageErrorInfo = e.getMessage(); System.out.println(e); }finally{ su = null; if(pageErrorInfo!=null){ // out.print(pageErrorInfo); } } return ""; } 请检查firefox下的flash插件版本。
您好,版本是没有问题的。因为如果我不将JSP做成Servlet是没问题的。
flash插件版本分别是:
Adobe Flash Player 10 ActiveX
Adobe Flash Player 10 Plugin
我将upload_url: "http://192.168.1.253:8080/SmartUpload/UploadFileExampleSubmit.jsp" 更改成http://192.168.1.253:8080/action/UploadFilesSubmit.do,换句话说,我将UploadFileExampleSubmit.jsp中的内容写在struts的action中,在IE下执行是没问题的,但是在火狐下不知道为什么总是不能执行这个文件,我设置的端点也无效,但是在IE下这个文件就可以正常走下了。请问可以帮忙解决吗?谢谢。 UploadFilesSubmit.java文件 public Object onPostBack(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { response.reset(); response.setContentType("text/xml; charset=utf-8"); PrintWriter out = response.getWriter(); String pageErrorInfo = null; FilesUpload su = null; try{ su = new FilesUpload(); su.initialize(request,response); su.upload(); pageErrorInfo = FilesUploadFTP.fileUpload(su,request,response); if(pageErrorInfo==null){ out.print("uploadFilesSuccess"); } }catch(Exception e){ pageErrorInfo = e.getMessage(); System.out.println(e); }finally{ su = null; if(pageErrorInfo!=null){ // out.print(pageErrorInfo); } } return ""; }
请检查firefox下的flash插件版本。
您好,上传完成后我想对上传的图片进行描述编辑。 请问我怎么获取上传列表中的所有的图片。
Java代码
function queueComplete(numFilesUploaded) {
document.getElementById(this.customSettings.myFileListTarget+"SuccessUploadCount").innerHTML=this.getStats().successful_uploads;
document.location.href = "uploaddoneedit.aspx?u=1";
}
function queueComplete(numFilesUploaded) {
document.getElementById(this.customSettings.myFileListTarget+"SuccessUploadCount").innerHTML=this.getStats().successful_uploads;
document.location.href = "uploaddoneedit.aspx?u=1";
}
你可以在上传页面定义个隐藏属性,每次上传成功后将对应的文件信息(比如文件id,文件路径等)返回,然后传到这个隐藏属性中,等全部上传完后就可以对该隐藏属性进行操作,例如反显出上传的图片,进行添加描述,具体如何实现可以自己考虑。
真的很感谢楼主这么快的回答 Thanks for fast response
楼主,想请问一下, 在这个网页上http://swfupload.org/forum/generaldiscussion/542 他说的这个Rad Upload Plus是什么东西啊
是一个实现上传功能的 java applet,网址 http://www.radinks.com/upload/ , 局限性在于必须要求客户浏览器有jre1.4或1.4以上的jvm环境。 但一般客户的浏览器不会具备这样的jvm。
请问楼主,我把UploadFileExample.jsp上的file_upload_limit : 110,改为 file_upload_limit : 3000,然后选择1300张图片,它会弹出Sorry.Select fewer files,请问怎么解决啊,拜托楼主
关于这个问题可以看看swfupload上的回答 http://swfupload.org/forum/generaldiscussion/542。
stephen830 写道
springfeel 写道 stephen830 写道 springfeel 写道 upload_url:"http://localhost:8080/UploadFileExampleSubmit.jsp" 在PhotoMgr.java中 String userId = su.getRequest().getParameter("user_id"); String passId = su.getRequest().getParameter("pass_id"); 获得不到值,点击上传以后状态提示:上传失败: 请选择上传的文件 我老是提示请选择上传的文件。。。。 你的应用是在你本地的WEB的根目录下吧。(从你的 http://localhost:8080/UploadFileExampleSubmit.jsp 得知),你用的什么上传类,也是smartupload么? 是的,我用jbuider用smartupload 对比例子中的这些文件,你有改动过什么吗? 没有改动我只是改了一下smartupload里边File.java的文件名改成MyFile.java 要不我把工程给您帮我看看,非常感谢!
好的 你把文件通过站内短消息给我。
springfeel 写道
stephen830 写道 springfeel 写道 upload_url:"http://localhost:8080/UploadFileExampleSubmit.jsp" 在PhotoMgr.java中 String userId = su.getRequest().getParameter("user_id"); String passId = su.getRequest().getParameter("pass_id"); 获得不到值,点击上传以后状态提示:上传失败: 请选择上传的文件 我老是提示请选择上传的文件。。。。 你的应用是在你本地的WEB的根目录下吧。(从你的 http://localhost:8080/UploadFileExampleSubmit.jsp 得知),你用的什么上传类,也是smartupload么? 是的,我用jbuider用smartupload 对比例子中的这些文件,你有改动过什么吗?
没有改动我只是改了一下smartupload里边File.java的文件名改成MyFile.java
要不我把工程给您帮我看看,非常感谢!
功能完全支持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> </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 对本篇的建议!
-------------------------------------------------------------
分享知识 分享快乐,分享知识,分享快乐,希望文章能给需要的朋友带来小小的帮助。
评论
113 楼
iomo
2009-01-17
我的想法是每上传完一张图片后返回一个上传图片的ID给JS。(这里的ID是上传完成后返回的数据库中存储图片的路径的ID)
我在JS中定义一个变量用来获取上传文件的ID
当所有的图片都上传完成后把这个变量传给新的页面,新的页面对上传的图片进行编辑。
我有一个疑问是返值是successed,我可以在successed后面拼接图片的ID吗?
新手,望老大指点。
我在JS中定义一个变量用来获取上传文件的ID
当所有的图片都上传完成后把这个变量传给新的页面,新的页面对上传的图片进行编辑。
我有一个疑问是返值是successed,我可以在successed后面拼接图片的ID吗?
新手,望老大指点。
112 楼
stephen830
2009-01-16
iomo 写道
Java代码
var SWFUPLOAD_PHOTO_LIST = ""; // 保存上传文件的id列表
function uploadSuccess(file, serverData) {...
if (serverData && parseInt(serverData) != Math.NaN) {
// 一个文件传输成功
SWFUPLOAD_PHOTO_LIST += ","+serverData;
alert(SWFUPLOAD_PHOTO_LIST);
}
}
var SWFUPLOAD_PHOTO_LIST = ""; // 保存上传文件的id列表
function uploadSuccess(file, serverData) {...
if (serverData && parseInt(serverData) != Math.NaN) {
// 一个文件传输成功
SWFUPLOAD_PHOTO_LIST += ","+serverData;
alert(SWFUPLOAD_PHOTO_LIST);
}
}
获取不到上传的ID,请问老大怎么改?
serverData是返回值,自己定义的,返回值在UploadFileExampleSubmit.jsp中设置。 btw:得到上传的ID想用来做啥呢? 可以用file.id来得到上传文件ID
111 楼
iomo
2009-01-16
var SWFUPLOAD_PHOTO_LIST = ""; // 保存上传文件的id列表 function uploadSuccess(file, serverData) {... if (serverData && parseInt(serverData) != Math.NaN) { // 一个文件传输成功 SWFUPLOAD_PHOTO_LIST += ","+serverData; alert(SWFUPLOAD_PHOTO_LIST); } }
获取不到上传的ID,请问老大怎么改?
110 楼
stephen830
2009-01-13
hihq2000 写道
非常强大,找了很久这个是唯一直接发布就可以使用的版本 看了一下唯一的小问题就是上传成功的时候 显示的是 上传失败: successed
引用
有些朋友的上传成功后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); 就可以了。 就解决了 很感谢楼主的劳动!!
好的东西大家一起来用 ,哈哈。
109 楼
hihq2000
2009-01-12
非常强大,找了很久这个是唯一直接发布就可以使用的版本 看了一下唯一的小问题就是上传成功的时候 显示的是
上传失败: successed
引用
有些朋友的上传成功后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);
就可以了。
var isSuccess = (serverData.indexOf("successed")==0?true:false);
改为
var isSuccess = (serverData.indexOf("successed")>-1?true:false);
就可以了。
就解决了
很感谢楼主的劳动!!
108 楼
hihq2000
2009-01-12
非常强大,找了很久这个是唯一直接发布就可以使用的版本
看了一下唯一的小问题就是上传成功的时候
显示的是
很感谢楼主的劳动!!
看了一下唯一的小问题就是上传成功的时候
显示的是
引用
上传失败: successed
很感谢楼主的劳动!!
107 楼
xingjian.gm
2009-01-03
stephen830 写道
xingjian.gm 写道
我将upload_url: "http://192.168.1.253:8080/SmartUpload/UploadFileExampleSubmit.jsp" 更改成http://192.168.1.253:8080/action/UploadFilesSubmit.do,换句话说,我将UploadFileExampleSubmit.jsp中的内容写在struts的action中,在IE下执行是没问题的,但是在火狐下不知道为什么总是不能执行这个文件,我设置的端点也无效,但是在IE下这个文件就可以正常走下了。请问可以帮忙解决吗?谢谢。 UploadFilesSubmit.java文件 public Object onPostBack(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { response.reset(); response.setContentType("text/xml; charset=utf-8"); PrintWriter out = response.getWriter(); String pageErrorInfo = null; FilesUpload su = null; try{ su = new FilesUpload(); su.initialize(request,response); su.upload(); pageErrorInfo = FilesUploadFTP.fileUpload(su,request,response); if(pageErrorInfo==null){ out.print("uploadFilesSuccess"); } }catch(Exception e){ pageErrorInfo = e.getMessage(); System.out.println(e); }finally{ su = null; if(pageErrorInfo!=null){ // out.print(pageErrorInfo); } } return ""; } 请检查firefox下的flash插件版本。
您好,版本是没有问题的。因为如果我不将JSP做成Servlet是没问题的。
flash插件版本分别是:
Adobe Flash Player 10 ActiveX
Adobe Flash Player 10 Plugin
106 楼
stephen830
2008-12-31
xingjian.gm 写道
我将upload_url: "http://192.168.1.253:8080/SmartUpload/UploadFileExampleSubmit.jsp" 更改成http://192.168.1.253:8080/action/UploadFilesSubmit.do,换句话说,我将UploadFileExampleSubmit.jsp中的内容写在struts的action中,在IE下执行是没问题的,但是在火狐下不知道为什么总是不能执行这个文件,我设置的端点也无效,但是在IE下这个文件就可以正常走下了。请问可以帮忙解决吗?谢谢。 UploadFilesSubmit.java文件 public Object onPostBack(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { response.reset(); response.setContentType("text/xml; charset=utf-8"); PrintWriter out = response.getWriter(); String pageErrorInfo = null; FilesUpload su = null; try{ su = new FilesUpload(); su.initialize(request,response); su.upload(); pageErrorInfo = FilesUploadFTP.fileUpload(su,request,response); if(pageErrorInfo==null){ out.print("uploadFilesSuccess"); } }catch(Exception e){ pageErrorInfo = e.getMessage(); System.out.println(e); }finally{ su = null; if(pageErrorInfo!=null){ // out.print(pageErrorInfo); } } return ""; }
请检查firefox下的flash插件版本。
105 楼
xingjian.gm
2008-12-30
我将upload_url: "http://192.168.1.253:8080/SmartUpload/UploadFileExampleSubmit.jsp"
更改成http://192.168.1.253:8080/action/UploadFilesSubmit.do,换句话说,我将UploadFileExampleSubmit.jsp中的内容写在struts的action中,在IE下执行是没问题的,但是在火狐下不知道为什么总是不能执行这个文件,我设置的端点也无效,但是在IE下这个文件就可以正常走下了。请问可以帮忙解决吗?谢谢。
UploadFilesSubmit.java文件
public Object onPostBack(ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.reset();
response.setContentType("text/xml; charset=utf-8");
PrintWriter out = response.getWriter();
String pageErrorInfo = null;
FilesUpload su = null;
try{
su = new FilesUpload();
su.initialize(request,response);
su.upload();
pageErrorInfo = FilesUploadFTP.fileUpload(su,request,response);
if(pageErrorInfo==null){
out.print("uploadFilesSuccess");
}
}catch(Exception e){
pageErrorInfo = e.getMessage();
System.out.println(e);
}finally{
su = null;
if(pageErrorInfo!=null){
// out.print(pageErrorInfo);
}
}
return "";
}
更改成http://192.168.1.253:8080/action/UploadFilesSubmit.do,换句话说,我将UploadFileExampleSubmit.jsp中的内容写在struts的action中,在IE下执行是没问题的,但是在火狐下不知道为什么总是不能执行这个文件,我设置的端点也无效,但是在IE下这个文件就可以正常走下了。请问可以帮忙解决吗?谢谢。
UploadFilesSubmit.java文件
public Object onPostBack(ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.reset();
response.setContentType("text/xml; charset=utf-8");
PrintWriter out = response.getWriter();
String pageErrorInfo = null;
FilesUpload su = null;
try{
su = new FilesUpload();
su.initialize(request,response);
su.upload();
pageErrorInfo = FilesUploadFTP.fileUpload(su,request,response);
if(pageErrorInfo==null){
out.print("uploadFilesSuccess");
}
}catch(Exception e){
pageErrorInfo = e.getMessage();
System.out.println(e);
}finally{
su = null;
if(pageErrorInfo!=null){
// out.print(pageErrorInfo);
}
}
return "";
}
104 楼
iomo
2008-12-16
谢谢你的解答!
103 楼
stephen830
2008-12-12
iomo 写道
您好,上传完成后我想对上传的图片进行描述编辑。 请问我怎么获取上传列表中的所有的图片。
Java代码
function queueComplete(numFilesUploaded) {
document.getElementById(this.customSettings.myFileListTarget+"SuccessUploadCount").innerHTML=this.getStats().successful_uploads;
document.location.href = "uploaddoneedit.aspx?u=1";
}
function queueComplete(numFilesUploaded) {
document.getElementById(this.customSettings.myFileListTarget+"SuccessUploadCount").innerHTML=this.getStats().successful_uploads;
document.location.href = "uploaddoneedit.aspx?u=1";
}
你可以在上传页面定义个隐藏属性,每次上传成功后将对应的文件信息(比如文件id,文件路径等)返回,然后传到这个隐藏属性中,等全部上传完后就可以对该隐藏属性进行操作,例如反显出上传的图片,进行添加描述,具体如何实现可以自己考虑。
102 楼
iomo
2008-12-11
您好,上传完成后我想对上传的图片进行描述编辑。
请问我怎么获取上传列表中的所有的图片。
请问我怎么获取上传列表中的所有的图片。
function queueComplete(numFilesUploaded) { document.getElementById(this.customSettings.myFileListTarget+"SuccessUploadCount").innerHTML=this.getStats().successful_uploads; document.location.href = "uploaddoneedit.aspx?u=1"; }
101 楼
stephen830
2008-12-11
guanxfenx 写道
真的很感谢楼主这么快的回答 Thanks for fast response
100 楼
stephen830
2008-12-11
guanxfenx 写道
楼主,想请问一下, 在这个网页上http://swfupload.org/forum/generaldiscussion/542 他说的这个Rad Upload Plus是什么东西啊
是一个实现上传功能的 java applet,网址 http://www.radinks.com/upload/ , 局限性在于必须要求客户浏览器有jre1.4或1.4以上的jvm环境。 但一般客户的浏览器不会具备这样的jvm。
99 楼
guanxfenx
2008-12-11
真的很感谢楼主这么快的回答
Thanks for fast response
Thanks for fast response
98 楼
guanxfenx
2008-12-11
楼主,想请问一下,
在这个网页上http://swfupload.org/forum/generaldiscussion/542
他说的这个Rad Upload Plus是什么东西啊
在这个网页上http://swfupload.org/forum/generaldiscussion/542
他说的这个Rad Upload Plus是什么东西啊
97 楼
stephen830
2008-12-11
guanxfenx 写道
请问楼主,我把UploadFileExample.jsp上的file_upload_limit : 110,改为 file_upload_limit : 3000,然后选择1300张图片,它会弹出Sorry.Select fewer files,请问怎么解决啊,拜托楼主
关于这个问题可以看看swfupload上的回答 http://swfupload.org/forum/generaldiscussion/542。
96 楼
guanxfenx
2008-12-11
请问楼主,我把UploadFileExample.jsp上的file_upload_limit : 110,改为
file_upload_limit : 3000,然后选择1300张图片,它会弹出Sorry.Select fewer files,请问怎么解决啊,拜托楼主
file_upload_limit : 3000,然后选择1300张图片,它会弹出Sorry.Select fewer files,请问怎么解决啊,拜托楼主
95 楼
stephen830
2008-11-25
springfeel 写道
stephen830 写道
springfeel 写道 stephen830 写道 springfeel 写道 upload_url:"http://localhost:8080/UploadFileExampleSubmit.jsp" 在PhotoMgr.java中 String userId = su.getRequest().getParameter("user_id"); String passId = su.getRequest().getParameter("pass_id"); 获得不到值,点击上传以后状态提示:上传失败: 请选择上传的文件 我老是提示请选择上传的文件。。。。 你的应用是在你本地的WEB的根目录下吧。(从你的 http://localhost:8080/UploadFileExampleSubmit.jsp 得知),你用的什么上传类,也是smartupload么? 是的,我用jbuider用smartupload 对比例子中的这些文件,你有改动过什么吗? 没有改动我只是改了一下smartupload里边File.java的文件名改成MyFile.java 要不我把工程给您帮我看看,非常感谢!
好的 你把文件通过站内短消息给我。
94 楼
springfeel
2008-11-25
stephen830 写道
springfeel 写道
stephen830 写道 springfeel 写道 upload_url:"http://localhost:8080/UploadFileExampleSubmit.jsp" 在PhotoMgr.java中 String userId = su.getRequest().getParameter("user_id"); String passId = su.getRequest().getParameter("pass_id"); 获得不到值,点击上传以后状态提示:上传失败: 请选择上传的文件 我老是提示请选择上传的文件。。。。 你的应用是在你本地的WEB的根目录下吧。(从你的 http://localhost:8080/UploadFileExampleSubmit.jsp 得知),你用的什么上传类,也是smartupload么? 是的,我用jbuider用smartupload 对比例子中的这些文件,你有改动过什么吗?
没有改动我只是改了一下smartupload里边File.java的文件名改成MyFile.java
要不我把工程给您帮我看看,非常感谢!
发表评论
-
Java的内存机制
2016-08-22 13:27 4821.Java的内存机制 Java 把内存划分成两 ... -
监听域对象中属性的变更的监听器
2016-07-18 19:06 1755监听域对象中属性的变更的监听器 域对象中属性 ... -
HttpSessionActivationListener
2016-07-18 18:46 649HttpSessionActivationListe ... -
Web容器监听器(实现在线统计人数,踢人)
2016-07-18 10:48 951Web容器监听器(实现在线统计人数,踢人) Servl ... -
HttpSessionBindingListener接口
2016-07-18 10:29 642HttpSessionBindingListene ... -
ServletRequestAttributeListener接口
2016-07-17 22:24 8342. HttpSessionAttribut ... -
Servlet3中异步Servlet特性介绍
2016-07-17 15:50 846Servlet3中异步Servlet特性介绍 ... -
HttpSessionAttributeListener
2016-07-15 17:49 696HttpSessionAttributeListener ... -
使用ServletContextAttributeListener
2016-07-15 16:47 847使用ServletContextAttr ... -
ServletRequestListener
2016-07-15 16:25 601ServletRequestListener接口 ... -
HttpSessionListener
2016-07-15 14:56 635HttpSessionListener接口 M ... -
ServletContextListener 接口
2016-07-15 12:16 628在 Servlet API 中有一个 Se ... -
ReflectASM,高性能的反射
2016-04-29 17:19 961http://www.oschina.net/p/r ... -
Java多线程与静态方法
2016-04-26 11:52 850Java多线程与静态方法 在多线程中使用静态方法会发生什么 ... -
log4j日志输出格式
2016-04-12 20:58 1117log4j日志输出格式 在LOG4J的配置文件中,l ... -
Servlet3.0
2016-04-12 16:58 698一、Servlet3.0介绍 Servlet3 ... -
log4j2 使用详解
2016-04-12 14:14 1466log4j2 使用详解 转载自 Blog of ... -
Eclipse jar打包和命令行运行
2016-04-08 10:44 2963?Eclipse jar打包和命令行运行 第1步: ... -
GRAPHICSMAGICK+IM4JAVA错误Cannot run program "gm": error=2
2015-05-19 15:27 4112在通过 GRAPHICSMAGICK+IM4JAVA ... -
GraphicsMagick安装、实时生成缩略图
2015-05-19 13:39 2424GraphicsMagick安装、实时生成缩略图 ...
相关推荐
本解决方案将详细介绍如何使用SWFUpload实现多文件WEB批量上传的步骤,并解决可能遇到的问题。 首先,SWFUpload是一个开源的JavaScript库,它使用Flash技术来处理文件上传。由于Flash支持拖放和多文件选择,因此...
SwfUpload 是一款开源的...总的来说,SwfUpload是一个强大且灵活的文件上传解决方案,尤其适用于需要大量处理用户上传文件的网站或应用。其完整的注释和易用性使得它成为开发者们实现批量上传功能的首选工具。
使用这个资源,你可以快速了解如何在ASP项目中整合SWFUpload,进行批量文件上传的实现。 总之,ASP批量上传SWFUpload是结合了Flash技术和ASP服务器端脚本的一种高效文件上传方案,它提供了良好的用户体验,同时需要...
总结,swfupload作为一个成熟的文件上传解决方案,为批量上传提供了强大的功能和良好的用户体验。然而,随着技术的发展,开发者也需要关注其兼容性问题,适时采用HTML5等新技术来替换或补充。通过与PHP的紧密结合,...
java 批量 多文件 上传 SwfUpload插件兼容所有浏览器,火狐需要安装最新的flash reader,压缩包内有最新的flash reader,实例是上传多张图片,只需稍加修改可以上传任何格式的文件,很好看很好用,特意整理出来分享...
**SWFUpload 知识点详解** ...通过以上步骤和知识点,你将能够有效地使用SWFUpload实现批量文件上传功能,并在MyEclipse 6.5环境下进行开发和调试。记住,持续优化和测试是确保上传功能稳定性和用户体验的关键。
综上所述,SwfUpload为Web开发者提供了一套高效、直观的文件上传解决方案。它不仅支持多选批量上传和进度显示,还具备缩略图预览和批量删除功能,大大提升了文件管理的便捷性和用户体验。在实际项目中,结合合理的...
综上所述,SWFupload是网页批量文件上传的优秀解决方案,其强大功能和易用性使得它在开发中得到了广泛应用。通过了解其工作原理和集成方式,开发者能够更好地利用这一工具提升用户在上传文件时的体验。
总的来说,ASP.NET批量上传SwfUpload-Ext的组合是一种强大的解决方案,它结合了SwfUpload的高效上传能力和ExtJS的丰富交互体验,为用户提供了高效、安全的文件上传体验。在实际开发中,开发者需要根据项目需求灵活...
总的来说,SWFUpload提供了一套强大而灵活的工具,使Web开发人员能够优雅地处理大文件上传和多文件批量上传,同时还支持传递额外的参数,增加了上传过程的灵活性。通过理解并正确应用这些概念和技术,我们可以构建出...
2. **多文件上传**:SwfUpload的核心功能是支持多个文件的批量上传。用户可以通过选择多个文件来一次性上传,减少了重复操作。 3. **进度条显示**:SwfUpload可以显示上传进度,让用户了解文件上传的状态,提高了...
SWFUpload是一款经典的JavaScript库,专门用于处理大文件和批量文件的上传。它利用Flash技术在浏览器端提供用户友好的上传界面,同时支持多文件选择和断点续传功能,尤其适用于那些需要处理大量数据或者单个文件体积...
SWFUpload是一款强大的JavaScript与Flash相结合的文件上传组件,它被广泛用于网页中的批量图片上传功能。这个"SWFUpload批量上传图片"的项目是一个基于MyEclipse的工程实例,旨在帮助开发者理解和实现批量上传图片的...
总之,SwfUpload结合Ext.Net为.NET开发者提供了一个高效、可定制的多文件上传解决方案,提高了Web应用的交互性和用户体验。通过熟练掌握这两项技术,开发者可以轻松地构建出满足各种需求的文件上传系统。
SwfUpload结合Java和Struts2框架,提供了一种高效、可定制的多文件上传解决方案。通过前端的SwfUpload配置和后端的Java处理,我们可以实现流畅的上传体验,同时保持对上传文件的有效控制。在实际项目中,还需要考虑...
WEB版一次选择多个文件进行批量上传(swfupload)的解决方案 一般的WEB方式文件上传只能使用FileUpload控件进行一个文件一个文件的进行上传,就算是批量上传,也要把文件一个一个的添加到页面,无法如 windows程序...
本项目是struts2和swfupload结合,实现单个文件上传、上传后预览(index.jsp),和批量上传(multiple.jsp),里面都有代码注释和一个整理的说明文档(SWFUpload说明文档),讲的非常非常详细,都是本人亲自整理。...