1、本文框架:
SWFUpload:2.2.0
Spring mvc 3.2.3
2、SWFUpload官方示例:
http://demo.swfupload.org/v220/index.htm
官方文档:
http://demo.swfupload.org/Documentation/
3、示例
我这边的示例取自官方示例:Simple Demo(http://demo.swfupload.org/v220/simpledemo/index.php),前台属性设置的比较全,有些是可以省略的。
3.1 前台示例
demo.jsp
引入资源:
<!-- swfupload -->
<link rel="stylesheet" href="common/swfupload/css/default.css" type="text/css"/>
<script type="text/javascript" src="common/swfupload/swfupload.js"></script>
<script type="text/javascript" src="common/swfupload/simple/swfupload.queue.js"></script>
<script type="text/javascript" src="common/swfupload/simple/fileprogress.js"></script>
<script type="text/javascript" src="common/swfupload/simple/handlers.js"></script>
JS代码:
<script type="text/javascript">
$(function(){
var swfu;
window.onload = function() {
var settings = {
flash_url : "common/swfupload/swfupload.swf",
upload_url: "common/upload.htm?jsessionid=<%=request.getSession().getId()%>",
file_size_limit : "100 MB",
file_types : "*.*",
file_types_description : "All Files",
file_upload_limit : 100,
file_queue_limit : 0,
custom_settings : {
progressTarget : "fsUploadProgress",
cancelButtonId : "btnCancel"
},
debug: false,
// Button settings
button_image_url: "../common/swfupload/images/TestImageNoText_65x29.png",
button_width: "65",
button_height: "29",
button_placeholder_id: "spanButtonPlaceHolder",
button_text: '<span class="theFont">Hello</span>',
button_text_style: ".theFont { font-size: 16; }",
button_text_left_padding: 12,
button_text_top_padding: 3,
// The event handler functions are defined in handlers.js
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
};
swfu = new SWFUpload(settings);
};
})
//上传成功后函数
function uploadSuccess(file, serverData) {
var data = eval("(" +serverData + ")");
$("#imgbox").html("<img src=\""+data.url+"\"/>")
}
</script>
JSP正文代码:
<label>首页大图</label>
<form id="form1" action="index.php" method="post" enctype="multipart/form-data">
<p>This page demonstrates a simple usage of SWFUpload. It uses the Queue Plugin to simplify uploading or cancelling all queued files.</p>
<div class="fieldset flash" id="fsUploadProgress">
<span class="legend">Upload Queue</span>
</div>
<div id="divStatus">0 Files Uploaded</div><div>
<span id="spanButtonPlaceHolder"></span>
<input id="btnCancel" type="button" value="Cancel All Uploads" onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" />
</div>
</form>
<!--预览上传好的图-->
<span id="imgbox"></span>
至此,前台代码已OK,打开demo.jsp,效果如下:
3.2 后台Spring mvc示例(即:上面JS代码中的upload_url的访问地址: "common/upload.htm")
@Controller
@RequestMapping(value="common")
public class SWFController {
protected final transient Log log = LogFactory.getLog(SWFController.class);
private static String UPLOADFILE = "uploadfile";
//获取绝对路径的工具类
@Autowired
private RealPathResolver realPathResolver;
@RequestMapping(value = "upload")
public void uploaddefault(@RequestParam(value = "Filedata", required = false) MultipartFile file,
HttpServletRequest request, HttpServletResponse response,HttpSession session,ModelMap model) throws Exception {
ResponseUtils.renderJson(response,uploaddesc(file, request, response));
}
private String uploaddesc( MultipartFile file,HttpServletRequest request, HttpServletResponse response) throws Exception
{
String fileName = file.getOriginalFilename();
String rootPath = realPathResolver.get("/");
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM/dd");
String ymd = sdf.format(new Date());
File f = new File(rootPath, file
.getOriginalFilename());
String newfilename = FileUtil.randomReName(f.getAbsolutePath());
String url = UPLOADFILE + "/" + ymd;
File dirFile = new File(rootPath+url);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
url+=newfilename;
try {
file.transferTo(new File(rootPath+url));
return "{'success':true,'url':'"+url+ "','filename':'" + fileName + "','newfilename':'"+newfilename + "'," +
"'state':'SUCCESS','title':'"+fileName+"','original':'"+fileName+"','type':'"+FilenameUtils.getExtension(f.getName())+"'}";
} catch (Exception e) {
log.error("upload error!", e);
throw e;
}
}
}
注:
1、realPathResolver.get(String path);方法是获取系统的绝对路径,代码略。
2、FileUtil.randomReName(String fileName);方法是根据传入的文件名随机重命名,代码略。
uploaddesc方法的return结果示例如下:(url可供前台预览用)
{'success':true,'url':'uploadfile/201309/25201335251535583028.jpg','filename':'QQ图片20130922161855.jpg','newfilename':'201335251535583028.jpg','state':'SUCCESS','title':'QQ图片20130922161855.jpg','original':'QQ图片20130922161855.jpg','type':'jpg'}
前台效果如下:
----------------------------------------
解释:
1、uploaddefault方法获取File用了注解方式,也可以用其它方式,比如:
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest.getFile("Filedata");
2、JSP表单的属性中加上:enctype="multipart/form-data"
3、关于session会丢失的问题解决办法。
做个实验看看是否是在上传的时候session新建了,而不是原来的session。
先在项目中加上session值,如下:(可以登陆的时候加)
session.setAttribute("admin", logsys);//logsys是个JAVA实体类,具体略
demo.jsp中打印session:
sesseion:${sessionScope.admin}
在上传前页面上显示:sesseion:com.pojo.SysUserinfo@1adb4f9c,说明session的admin值是存在的。
在上传的方法中(上述后台uploaddefault方法)中取出session为admin的值,结果发现SysUserinfo类的值为null。说明session丢失了。
解决方法是在url中加上jsessionid:upload_url: "common/upload.htm?jsessionid=<%=request.getSession().getId()%>",
(不过百度编辑器的swfupload并没有session丢失的现象。
4、要是上传多张图片,并需要预览,可以使用jquery的插件:lightbox。
官方网站:
http://leandrovieira.com/projects/jquery/lightbox/
-----------------------------------
**********参考资料**********
http://www.cnblogs.com/2050/archive/2012/08/29/2662932.html
分享到:
相关推荐
10. **工具集成**:SWFUpload可以与各种Java Web框架(如Spring MVC、Struts2)集成,理解这些框架如何处理文件上传会更便于实际开发。 博客链接中的内容可能包含了使用SWFUpload的具体步骤和示例,你可以参考该...
它通过Flash技术提供了一种优雅的方式,允许用户在不刷新页面的情况下上传多个文件。SwfUpload 支持预览、进度条显示等功能,提高了用户体验,尤其是在处理大文件上传时。 SSH(Struts2 + Spring + Hibernate)是一...
你可以使用Spring MVC、Struts2或其他MVC框架来处理HTTP请求。在控制器方法中,接收上传的文件流,保存到指定目录,或者进一步处理(如缩略图生成、文件类型检查等)。 5. **安全性与优化**:为了安全起见,你需要...
1. Java:可以使用Servlet或者Spring MVC等框架处理上传请求,解析请求中的文件数据,并将其保存至服务器。 2. .NET:可以使用ASP.NET或ASP.NET Core创建Web Forms或MVC控制器来接收上传文件。 3. PHP:通过PHP的$_...
在后端,你需要创建一个Java服务来接收由SWFUpload发送的HTTP请求,处理上传的文件,通常这会涉及到Servlet或Spring MVC等框架。 为了实现这个功能,你需要掌握以下技术点: - JavaScript基础,特别是对DOM操作和...
这通常涉及到MVC框架(如Spring MVC或Struts2)中的Controller层。 - 文件接收后,可能需要进行验证(如大小、类型等),存储到服务器的指定位置,或者保存到数据库的二进制字段。 - 为了与前端通信,Java后端可能...
通常使用Servlet或者Spring MVC等框架来处理文件上传请求。SwfUpload的JavaScript代码会触发上传事件,将文件数据发送到服务器。服务器端接收文件后,可进行存储、处理或验证操作。 5. SwfUpload配置与使用: - ...
6. **Java Web服务**:后端的实现通常基于Servlet或Spring MVC等Java Web框架,通过定义处理上传请求的Servlet或Controller,接收并响应SWFUpload的请求。 7. **回调函数**:在SWFUpload的配置中,可以设定一系列的...
在Java后端,可以使用以下Spring MVC示例来接收并处理上传的文件: ```java @Controller public class FileUploadController { @RequestMapping(value = "/upload", method = RequestMethod.POST) public @...
- 如果你正在使用MVC框架(如Spring MVC或Struts2),需要将SWFUpload整合到现有的视图和控制器结构中。 - 对于前端,需要将SWFUpload的JavaScript代码和样式文件集成到页面模板中。 压缩包中的"swfupload_demo...
SwfUpload 是一款开源的Flash上传组件,它允许用户在网页中实现拖放式或点击式的文件上传功能,尤其适用于需要处理大文件或多文件上传的场景。在Java和JSP环境中,SwfUpload能与后端服务器进行交互,处理文件上传...
如果你的项目使用了Spring框架,那么Spring MVC的`MultipartFile`接口提供了一种更优雅的方式处理文件上传。只需在控制器方法参数中声明`MultipartFile`,Spring会自动处理解析和异常处理: ```java import org....
这三者的结合通常用于构建具有文件上传功能的动态网页应用,其中jQuery负责DOM操作和事件处理,SWFUpload处理文件上传逻辑,而Servlet则在服务器端接收并处理上传的文件。 ### 2. Java与Code Generation Code ...