`
angelbill3
  • 浏览: 256530 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

【学习】SWFUpload在Spring mvc框架下的上传示例

 
阅读更多
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
分享到:
评论

相关推荐

    java swfupload,上传,图片上传,文件上传,批量上传

    10. **工具集成**:SWFUpload可以与各种Java Web框架(如Spring MVC、Struts2)集成,理解这些框架如何处理文件上传会更便于实际开发。 博客链接中的内容可能包含了使用SWFUpload的具体步骤和示例,你可以参考该...

    SwfUpload+ssh+easyui实现的文件上传

    它通过Flash技术提供了一种优雅的方式,允许用户在不刷新页面的情况下上传多个文件。SwfUpload 支持预览、进度条显示等功能,提高了用户体验,尤其是在处理大文件上传时。 SSH(Struts2 + Spring + Hibernate)是一...

    java图片上传--SWFUpload

    你可以使用Spring MVC、Struts2或其他MVC框架来处理HTTP请求。在控制器方法中,接收上传的文件流,保存到指定目录,或者进一步处理(如缩略图生成、文件类型检查等)。 5. **安全性与优化**:为了安全起见,你需要...

    SWFUpload 批量上传插件

    1. Java:可以使用Servlet或者Spring MVC等框架处理上传请求,解析请求中的文件数据,并将其保存至服务器。 2. .NET:可以使用ASP.NET或ASP.NET Core创建Web Forms或MVC控制器来接收上传文件。 3. PHP:通过PHP的$_...

    swfupload 2.2 for java

    在后端,你需要创建一个Java服务来接收由SWFUpload发送的HTTP请求,处理上传的文件,通常这会涉及到Servlet或Spring MVC等框架。 为了实现这个功能,你需要掌握以下技术点: - JavaScript基础,特别是对DOM操作和...

    dark亲测可用的一个swfupload与java整合的小例子

    这通常涉及到MVC框架(如Spring MVC或Struts2)中的Controller层。 - 文件接收后,可能需要进行验证(如大小、类型等),存储到服务器的指定位置,或者保存到数据库的二进制字段。 - 为了与前端通信,Java后端可能...

    swf 多附件同时上传 进度条

    通常使用Servlet或者Spring MVC等框架来处理文件上传请求。SwfUpload的JavaScript代码会触发上传事件,将文件数据发送到服务器。服务器端接收文件后,可进行存储、处理或验证操作。 5. SwfUpload配置与使用: - ...

    SWFUpload+java 包含java代码的实现

    6. **Java Web服务**:后端的实现通常基于Servlet或Spring MVC等Java Web框架,通过定义处理上传请求的Servlet或Controller,接收并响应SWFUpload的请求。 7. **回调函数**:在SWFUpload的配置中,可以设定一系列的...

    java 版 swfupload

    在Java后端,可以使用以下Spring MVC示例来接收并处理上传的文件: ```java @Controller public class FileUploadController { @RequestMapping(value = "/upload", method = RequestMethod.POST) public @...

    SWFUploadv.2.2.0上传-java后台代码

    - 如果你正在使用MVC框架(如Spring MVC或Struts2),需要将SWFUpload整合到现有的视图和控制器结构中。 - 对于前端,需要将SWFUpload的JavaScript代码和样式文件集成到页面模板中。 压缩包中的"swfupload_demo...

    swfupload jsp java

    SwfUpload 是一款开源的Flash上传组件,它允许用户在网页中实现拖放式或点击式的文件上传功能,尤其适用于需要处理大文件或多文件上传的场景。在Java和JSP环境中,SwfUpload能与后端服务器进行交互,处理文件上传...

    Java 多文件上传

    如果你的项目使用了Spring框架,那么Spring MVC的`MultipartFile`接口提供了一种更优雅的方式处理文件上传。只需在控制器方法参数中声明`MultipartFile`,Spring会自动处理解析和异常处理: ```java import org....

    IT技术文章示例

    这三者的结合通常用于构建具有文件上传功能的动态网页应用,其中jQuery负责DOM操作和事件处理,SWFUpload处理文件上传逻辑,而Servlet则在服务器端接收并处理上传的文件。 ### 2. Java与Code Generation Code ...

Global site tag (gtag.js) - Google Analytics