- 浏览: 3011024 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 对本篇的建议!
-------------------------------------------------------------
分享知识 分享快乐,分享知识,分享快乐,希望文章能给需要的朋友带来小小的帮助。
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
对比例子中的这些文件,你有改动过什么吗?
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
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么?
stephen830 写道
springfeel 写道 stephen830 写道 springfeel 写道 stephen830 写道 springfeel 写道 在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i&amp;amp;amp;amp;amp;lt;su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件"); 那说明没有收到要传送的文件,你也是用smartuplaod对么?你的upload_url: "&amp;amp;amp;amp;lt;%=uploadUrl.toString()%&amp;amp;amp;amp;gt;" 这个路径用http://xxxxx/UploadFileExample.jsp 这样的完整路径了么? &amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp; StringBuffer uploadUrl = new StringBuffer("http://"); uploadUrl.append(request.getHeader("Host")); uploadUrl.append(request.getContextPath()); uploadUrl.append("/UploadFileExampleSubmit.jsp"); var settings = { flash_url : "js/swfupload.swf", upload_url: "http://localhost:8080/UploadFileExample.jsp", 可以带端口号吗? 我改了以后怎么状态老是等待上传完了没反应了 端口号可以的 那是怎么回事儿呀 你的flash插件版本是多少?这个需要flash 9.0.124 或者 flash 10.0.12.36 版本. flash的版本号对,两个我都有
你重新刷新下这篇文章,我在文章开头补充了几点注意事项,你看看第4点 关于上传返回值的说明。
springfeel 写道
stephen830 写道 springfeel 写道 stephen830 写道 springfeel 写道 在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i&amp;amp;amp;amp;lt;su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件"); 那说明没有收到要传送的文件,你也是用smartuplaod对么?你的upload_url: "&amp;amp;amp;lt;%=uploadUrl.toString()%&amp;amp;amp;gt;" 这个路径用http://xxxxx/UploadFileExample.jsp 这样的完整路径了么? &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; StringBuffer uploadUrl = new StringBuffer("http://"); uploadUrl.append(request.getHeader("Host")); uploadUrl.append(request.getContextPath()); uploadUrl.append("/UploadFileExampleSubmit.jsp"); var settings = { flash_url : "js/swfupload.swf", upload_url: "http://localhost:8080/UploadFileExample.jsp", 可以带端口号吗? 我改了以后怎么状态老是等待上传完了没反应了 端口号可以的 那是怎么回事儿呀 你的flash插件版本是多少?这个需要flash 9.0.124 或者 flash 10.0.12.36 版本.
flash的版本号对,两个我都有
stephen830 写道
springfeel 写道 stephen830 写道 springfeel 写道 在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i&amp;amp;amp;lt;su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件"); 那说明没有收到要传送的文件,你也是用smartuplaod对么?你的upload_url: "&amp;amp;lt;%=uploadUrl.toString()%&amp;amp;gt;" 这个路径用http://xxxxx/UploadFileExample.jsp 这样的完整路径了么? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuffer uploadUrl = new StringBuffer("http://"); uploadUrl.append(request.getHeader("Host")); uploadUrl.append(request.getContextPath()); uploadUrl.append("/UploadFileExampleSubmit.jsp"); var settings = { flash_url : "js/swfupload.swf", upload_url: "http://localhost:8080/UploadFileExample.jsp", 可以带端口号吗? 我改了以后怎么状态老是等待上传完了没反应了 端口号可以的 那是怎么回事儿呀
你的flash插件版本是多少?这个需要flash 9.0.124 或者 flash 10.0.12.36 版本.
springfeel 写道
stephen830 写道 springfeel 写道 在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i&amp;amp;lt;su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件"); 那说明没有收到要传送的文件,你也是用smartuplaod对么?你的upload_url: "&amp;lt;%=uploadUrl.toString()%&amp;gt;" 这个路径用http://xxxxx/UploadFileExample.jsp 这样的完整路径了么? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer uploadUrl = new StringBuffer("http://"); uploadUrl.append(request.getHeader("Host")); uploadUrl.append(request.getContextPath()); uploadUrl.append("/UploadFileExampleSubmit.jsp"); var settings = { flash_url : "js/swfupload.swf", upload_url: "http://localhost:8080/UploadFileExample.jsp", 可以带端口号吗? 我改了以后怎么状态老是等待上传完了没反应了 端口号可以的
那是怎么回事儿呀
stephen830 写道
springfeel 写道 在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i&amp;lt;su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件"); 那说明没有收到要传送的文件,你也是用smartuplaod对么?你的upload_url: "&lt;%=uploadUrl.toString()%&gt;" 这个路径用http://xxxxx/UploadFileExample.jsp 这样的完整路径了么? StringBuffer uploadUrl = new StringBuffer("http://"); uploadUrl.append(request.getHeader("Host")); uploadUrl.append(request.getContextPath()); uploadUrl.append("/UploadFileExampleSubmit.jsp"); var settings = { flash_url : "js/swfupload.swf", upload_url: "http://localhost:8080/UploadFileExample.jsp", 可以带端口号吗? 我改了以后怎么状态老是等待上传完了没反应了
端口号可以的
springfeel 写道
在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i&lt;su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件"); 那说明没有收到要传送的文件,你也是用smartuplaod对么?你的upload_url: "<%=uploadUrl.toString()%>" 这个路径用http://xxxxx/UploadFileExample.jsp 这样的完整路径了么?
StringBuffer uploadUrl = new StringBuffer("http://");
uploadUrl.append(request.getHeader("Host"));
uploadUrl.append(request.getContextPath());
uploadUrl.append("/UploadFileExampleSubmit.jsp");
var settings = {
flash_url : "js/swfupload.swf", upload_url: "http://localhost:8080/UploadFileExample.jsp",
可以带端口号吗?
我改了以后怎么状态老是等待上传完了没反应了
在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i<su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件");
那说明没有收到要传送的文件,你也是用smartuplaod对么?你的upload_url: "<%=uploadUrl.toString()%>" 这个路径用http://xxxxx/UploadFileExample.jsp 这样的完整路径了么?
stephen830 写道
springfeel 写道 为什么提示我:上传失败: 请选择上传的文件 请检查下文件是否已经全部引进来。或者 flash版本是否为最新。 我检查了,都引进来了,就是不知道PhotoMgr.java写的对不对。传上去您看看 package com.soft4j.bo; import com.soft4j.httpupload4j.*; import javax.servlet.jsp.*; public class PhotoMgr { public PhotoMgr() { } 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 //校验文件类型和大小 //su.getFiles().getCount()是0 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:\\MyEclipse\\imageTest\\defaultroot\\uploadimage\\";//这里填写项目中存放上传文件的物理路径 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 { // } } }
首先你在这个类中设置断点,看有没有进入这个方法。
如果没有进入,说明 upload_url参数的问题, 改成你系统的 http://..../UploadFileExampleSubmit.jsp
springfeel 写道
为什么提示我:上传失败: 请选择上传的文件 请检查下文件是否已经全部引进来。或者 flash版本是否为最新。
我检查了,都引进来了,就是不知道PhotoMgr.java写的对不对。传上去您看看
package com.soft4j.bo;
import com.soft4j.httpupload4j.*;
import javax.servlet.jsp.*;
public class PhotoMgr {
public PhotoMgr() {
}
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
//校验文件类型和大小
//su.getFiles().getCount()是0
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:\\MyEclipse\\imageTest\\defaultroot\\uploadimage\\";//这里填写项目中存放上传文件的物理路径
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 {
//
}
}
}
看了篇章感觉帮助很大,多谢你了。 我有两个问题想问一下: 1、文件上传后的状态信息是在哪儿设置的? 2、文件上传成功后,我在服务器的件夹中可以看到上传的文件, 但是状态信息却用红色的字显示:“上传失败:successed”, 而且表的下面信息也显示:“等待上传1个,成功上传1个”,可是我只选择一个文件上传。
上传后不管成功还是失败,都需要有返回信息:参考我的那个 UploadFileExampleSubmit.jsp
成功后返回 out.print("successed");
失败后返回 out.print(pageErrorInfo);
你可以在调试下看看。
大力水手 写道
请教楼主在 jsp中 out.print("successed"); 这样返回“successed” 那我在struts action里面应该怎么返回呢? 谢谢~ response.getWriter().print("successed"); 这样写就可以了
一点没错。
请教楼主在 jsp中 out.print("successed"); 这样返回“successed” 那我在struts action里面应该怎么返回呢? 谢谢~
response.getWriter().print("successed");
这样写就可以了
为什么提示我:上传失败: 请选择上传的文件
请检查下文件是否已经全部引进来。或者 flash版本是否为最新。
功能完全支持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 对本篇的建议!
-------------------------------------------------------------
分享知识 分享快乐,分享知识,分享快乐,希望文章能给需要的朋友带来小小的帮助。
评论
93 楼
stephen830
2008-11-25
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
对比例子中的这些文件,你有改动过什么吗?
92 楼
springfeel
2008-11-25
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
91 楼
stephen830
2008-11-25
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么?
90 楼
springfeel
2008-11-25
upload_url:"http://localhost:8080/UploadFileExampleSubmit.jsp"
在PhotoMgr.java中
String userId = su.getRequest().getParameter("user_id");
String passId = su.getRequest().getParameter("pass_id");
获得不到值,点击上传以后状态提示:上传失败: 请选择上传的文件
我老是提示请选择上传的文件。。。。
在PhotoMgr.java中
String userId = su.getRequest().getParameter("user_id");
String passId = su.getRequest().getParameter("pass_id");
获得不到值,点击上传以后状态提示:上传失败: 请选择上传的文件
我老是提示请选择上传的文件。。。。
89 楼
stephen830
2008-11-25
springfeel 写道
stephen830 写道
springfeel 写道 stephen830 写道 springfeel 写道 stephen830 写道 springfeel 写道 在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i&amp;amp;amp;amp;amp;lt;su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件"); 那说明没有收到要传送的文件,你也是用smartuplaod对么?你的upload_url: "&amp;amp;amp;amp;lt;%=uploadUrl.toString()%&amp;amp;amp;amp;gt;" 这个路径用http://xxxxx/UploadFileExample.jsp 这样的完整路径了么? &amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp; StringBuffer uploadUrl = new StringBuffer("http://"); uploadUrl.append(request.getHeader("Host")); uploadUrl.append(request.getContextPath()); uploadUrl.append("/UploadFileExampleSubmit.jsp"); var settings = { flash_url : "js/swfupload.swf", upload_url: "http://localhost:8080/UploadFileExample.jsp", 可以带端口号吗? 我改了以后怎么状态老是等待上传完了没反应了 端口号可以的 那是怎么回事儿呀 你的flash插件版本是多少?这个需要flash 9.0.124 或者 flash 10.0.12.36 版本. flash的版本号对,两个我都有
你重新刷新下这篇文章,我在文章开头补充了几点注意事项,你看看第4点 关于上传返回值的说明。
88 楼
springfeel
2008-11-25
stephen830 写道
springfeel 写道
stephen830 写道 springfeel 写道 stephen830 写道 springfeel 写道 在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i&amp;amp;amp;amp;lt;su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件"); 那说明没有收到要传送的文件,你也是用smartuplaod对么?你的upload_url: "&amp;amp;amp;lt;%=uploadUrl.toString()%&amp;amp;amp;gt;" 这个路径用http://xxxxx/UploadFileExample.jsp 这样的完整路径了么? &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; StringBuffer uploadUrl = new StringBuffer("http://"); uploadUrl.append(request.getHeader("Host")); uploadUrl.append(request.getContextPath()); uploadUrl.append("/UploadFileExampleSubmit.jsp"); var settings = { flash_url : "js/swfupload.swf", upload_url: "http://localhost:8080/UploadFileExample.jsp", 可以带端口号吗? 我改了以后怎么状态老是等待上传完了没反应了 端口号可以的 那是怎么回事儿呀 你的flash插件版本是多少?这个需要flash 9.0.124 或者 flash 10.0.12.36 版本.
flash的版本号对,两个我都有
87 楼
stephen830
2008-11-25
springfeel 写道
stephen830 写道
springfeel 写道 stephen830 写道 springfeel 写道 在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i&amp;amp;amp;lt;su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件"); 那说明没有收到要传送的文件,你也是用smartuplaod对么?你的upload_url: "&amp;amp;lt;%=uploadUrl.toString()%&amp;amp;gt;" 这个路径用http://xxxxx/UploadFileExample.jsp 这样的完整路径了么? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuffer uploadUrl = new StringBuffer("http://"); uploadUrl.append(request.getHeader("Host")); uploadUrl.append(request.getContextPath()); uploadUrl.append("/UploadFileExampleSubmit.jsp"); var settings = { flash_url : "js/swfupload.swf", upload_url: "http://localhost:8080/UploadFileExample.jsp", 可以带端口号吗? 我改了以后怎么状态老是等待上传完了没反应了 端口号可以的 那是怎么回事儿呀
你的flash插件版本是多少?这个需要flash 9.0.124 或者 flash 10.0.12.36 版本.
86 楼
springfeel
2008-11-25
stephen830 写道
springfeel 写道
stephen830 写道 springfeel 写道 在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i&amp;amp;lt;su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件"); 那说明没有收到要传送的文件,你也是用smartuplaod对么?你的upload_url: "&amp;lt;%=uploadUrl.toString()%&amp;gt;" 这个路径用http://xxxxx/UploadFileExample.jsp 这样的完整路径了么? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer uploadUrl = new StringBuffer("http://"); uploadUrl.append(request.getHeader("Host")); uploadUrl.append(request.getContextPath()); uploadUrl.append("/UploadFileExampleSubmit.jsp"); var settings = { flash_url : "js/swfupload.swf", upload_url: "http://localhost:8080/UploadFileExample.jsp", 可以带端口号吗? 我改了以后怎么状态老是等待上传完了没反应了 端口号可以的
那是怎么回事儿呀
85 楼
stephen830
2008-11-25
springfeel 写道
stephen830 写道
springfeel 写道 在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i&amp;lt;su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件"); 那说明没有收到要传送的文件,你也是用smartuplaod对么?你的upload_url: "&lt;%=uploadUrl.toString()%&gt;" 这个路径用http://xxxxx/UploadFileExample.jsp 这样的完整路径了么? StringBuffer uploadUrl = new StringBuffer("http://"); uploadUrl.append(request.getHeader("Host")); uploadUrl.append(request.getContextPath()); uploadUrl.append("/UploadFileExampleSubmit.jsp"); var settings = { flash_url : "js/swfupload.swf", upload_url: "http://localhost:8080/UploadFileExample.jsp", 可以带端口号吗? 我改了以后怎么状态老是等待上传完了没反应了
端口号可以的
84 楼
springfeel
2008-11-25
stephen830 写道
springfeel 写道
在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i&lt;su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件"); 那说明没有收到要传送的文件,你也是用smartuplaod对么?你的upload_url: "<%=uploadUrl.toString()%>" 这个路径用http://xxxxx/UploadFileExample.jsp 这样的完整路径了么?
StringBuffer uploadUrl = new StringBuffer("http://");
uploadUrl.append(request.getHeader("Host"));
uploadUrl.append(request.getContextPath());
uploadUrl.append("/UploadFileExampleSubmit.jsp");
var settings = {
flash_url : "js/swfupload.swf", upload_url: "http://localhost:8080/UploadFileExample.jsp",
可以带端口号吗?
我改了以后怎么状态老是等待上传完了没反应了
83 楼
stephen830
2008-11-25
springfeel 写道
在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i<su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件");
那说明没有收到要传送的文件,你也是用smartuplaod对么?你的upload_url: "<%=uploadUrl.toString()%>" 这个路径用http://xxxxx/UploadFileExample.jsp 这样的完整路径了么?
82 楼
springfeel
2008-11-25
在类PhotoMgr.java设断点可以进入点调试到for (int i=0; i<su.getFiles().getCount();i++) 时就直接跳到if (fileCount==0) throw new Exception("请选择上传的文件");
81 楼
stephen830
2008-11-25
springfeel 写道
stephen830 写道
springfeel 写道 为什么提示我:上传失败: 请选择上传的文件 请检查下文件是否已经全部引进来。或者 flash版本是否为最新。 我检查了,都引进来了,就是不知道PhotoMgr.java写的对不对。传上去您看看 package com.soft4j.bo; import com.soft4j.httpupload4j.*; import javax.servlet.jsp.*; public class PhotoMgr { public PhotoMgr() { } 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 //校验文件类型和大小 //su.getFiles().getCount()是0 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:\\MyEclipse\\imageTest\\defaultroot\\uploadimage\\";//这里填写项目中存放上传文件的物理路径 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 { // } } }
首先你在这个类中设置断点,看有没有进入这个方法。
如果没有进入,说明 upload_url参数的问题, 改成你系统的 http://..../UploadFileExampleSubmit.jsp
80 楼
springfeel
2008-11-25
stephen830 写道
springfeel 写道
为什么提示我:上传失败: 请选择上传的文件 请检查下文件是否已经全部引进来。或者 flash版本是否为最新。
我检查了,都引进来了,就是不知道PhotoMgr.java写的对不对。传上去您看看
package com.soft4j.bo;
import com.soft4j.httpupload4j.*;
import javax.servlet.jsp.*;
public class PhotoMgr {
public PhotoMgr() {
}
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
//校验文件类型和大小
//su.getFiles().getCount()是0
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:\\MyEclipse\\imageTest\\defaultroot\\uploadimage\\";//这里填写项目中存放上传文件的物理路径
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 {
//
}
}
}
79 楼
stephen830
2008-11-25
maszxy 写道
看了篇章感觉帮助很大,多谢你了。 我有两个问题想问一下: 1、文件上传后的状态信息是在哪儿设置的? 2、文件上传成功后,我在服务器的件夹中可以看到上传的文件, 但是状态信息却用红色的字显示:“上传失败:successed”, 而且表的下面信息也显示:“等待上传1个,成功上传1个”,可是我只选择一个文件上传。
上传后不管成功还是失败,都需要有返回信息:参考我的那个 UploadFileExampleSubmit.jsp
成功后返回 out.print("successed");
失败后返回 out.print(pageErrorInfo);
你可以在调试下看看。
78 楼
maszxy
2008-11-25
看了篇章感觉帮助很大,多谢你了。
我有两个问题想问一下:
1、文件上传后的状态信息是在哪儿设置的?
2、文件上传成功后,我在服务器的件夹中可以看到上传的文件, 但是状态信息却用红色的字显示:“上传失败:successed”, 而且表的下面信息也显示:“等待上传1个,成功上传1个”,可是我只选择一个文件上传。
我有两个问题想问一下:
1、文件上传后的状态信息是在哪儿设置的?
2、文件上传成功后,我在服务器的件夹中可以看到上传的文件, 但是状态信息却用红色的字显示:“上传失败:successed”, 而且表的下面信息也显示:“等待上传1个,成功上传1个”,可是我只选择一个文件上传。
77 楼
stephen830
2008-11-24
大力水手 写道
大力水手 写道
请教楼主在 jsp中 out.print("successed"); 这样返回“successed” 那我在struts action里面应该怎么返回呢? 谢谢~ response.getWriter().print("successed"); 这样写就可以了
一点没错。
76 楼
大力水手
2008-11-24
大力水手 写道
请教楼主在 jsp中 out.print("successed"); 这样返回“successed” 那我在struts action里面应该怎么返回呢? 谢谢~
response.getWriter().print("successed");
这样写就可以了
75 楼
大力水手
2008-11-24
请教楼主在 jsp中 out.print("successed"); 这样返回“successed” 那我在struts action里面应该怎么返回呢? 谢谢~
74 楼
stephen830
2008-11-24
springfeel 写道
为什么提示我:上传失败: 请选择上传的文件
请检查下文件是否已经全部引进来。或者 flash版本是否为最新。
发表评论
-
Java的内存机制
2016-08-22 13:27 4831.Java的内存机制 Java 把内存划分成两 ... -
监听域对象中属性的变更的监听器
2016-07-18 19:06 1756监听域对象中属性的变更的监听器 域对象中属性 ... -
HttpSessionActivationListener
2016-07-18 18:46 650HttpSessionActivationListe ... -
Web容器监听器(实现在线统计人数,踢人)
2016-07-18 10:48 952Web容器监听器(实现在线统计人数,踢人) Servl ... -
HttpSessionBindingListener接口
2016-07-18 10:29 643HttpSessionBindingListene ... -
ServletRequestAttributeListener接口
2016-07-17 22:24 8352. HttpSessionAttribut ... -
Servlet3中异步Servlet特性介绍
2016-07-17 15:50 847Servlet3中异步Servlet特性介绍 ... -
HttpSessionAttributeListener
2016-07-15 17:49 697HttpSessionAttributeListener ... -
使用ServletContextAttributeListener
2016-07-15 16:47 848使用ServletContextAttr ... -
ServletRequestListener
2016-07-15 16:25 602ServletRequestListener接口 ... -
HttpSessionListener
2016-07-15 14:56 636HttpSessionListener接口 M ... -
ServletContextListener 接口
2016-07-15 12:16 629在 Servlet API 中有一个 Se ... -
ReflectASM,高性能的反射
2016-04-29 17:19 962http://www.oschina.net/p/r ... -
Java多线程与静态方法
2016-04-26 11:52 851Java多线程与静态方法 在多线程中使用静态方法会发生什么 ... -
log4j日志输出格式
2016-04-12 20:58 1118log4j日志输出格式 在LOG4J的配置文件中,l ... -
Servlet3.0
2016-04-12 16:58 699一、Servlet3.0介绍 Servlet3 ... -
log4j2 使用详解
2016-04-12 14:14 1467log4j2 使用详解 转载自 Blog of ... -
Eclipse jar打包和命令行运行
2016-04-08 10:44 2964?Eclipse jar打包和命令行运行 第1步: ... -
GRAPHICSMAGICK+IM4JAVA错误Cannot run program "gm": error=2
2015-05-19 15:27 4114在通过 GRAPHICSMAGICK+IM4JAVA ... -
GraphicsMagick安装、实时生成缩略图
2015-05-19 13:39 2426GraphicsMagick安装、实时生成缩略图 ...
相关推荐
本解决方案将详细介绍如何使用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说明文档),讲的非常非常详细,都是本人亲自整理。...