JAVA + uploadify 3.2.1 + Spring MVC + FTP 上传图片

最近在项目中遇到一个上传图片到其他服务器上,在上传的过程中要显示图片,并且页面要局部刷新;最为一个新手来说确实不容易,查找很多资料最终还是解决了。根据自己的理解来写点总结:

运用知识:SpringMVC + uploadify 3.2.1 + FTP + jquery

Uploadify 部分:如果对uploadify不清楚的同学可以看下官网,或者博客,网上有很多很好的例子和资料。官网地址:http://www.uploadify.com

首先到官网上下载uploadify所用到的 JS、CSS、swf 引用。

  下载地址:http://www.uploadify.com/download/

下载解压之后右下图:
JAVA + uploadify 3.2.1 + Spring MVC + FTP 上传图片_第1张图片
红色标记部分使我们需要的文件。
1. 页面部分
jsp页面头部:



这些文件要放入工程相应位置:

JAVA + uploadify 3.2.1 + Spring MVC + FTP 上传图片_第2张图片
jsp页面中 JS 代码:
$(document).ready(function(){
			// 图片上传
			$('#file_upload').uploadify({
			    'swf' : '/resources/misc/uploadify.swf?var='+(new Date()).getTime(),
			    'uploader' : '/userManager/uploadify;jsessionid=' + $("#jsession").val(),
			    'buttonText':'浏览',
			    'buttonClass':'btn',
			    'height': '20',
			    'width': '35',
			    'method':'post',
			    'multi': false,
			    'fileObjName':'file',
			    'fileTypeExts' : '*.jpg; *.jpeg; *.png; *.gif',
			    'fileSizeLimit' : '500KB',//上传文件允许的最大值,当不写单位,只写数字时,默认为KB
			    'onUploadSuccess' : function(file,data,response){
			    	var obj = eval('('+data+')');
			    	if(response){
			    		var img_url = obj.img_url;
				    	$("#uploadImg img").attr("src",img_url);
			    		$("#uploadImg").show();
			   			
			    		//赋值
			    		var img_name = obj.img_name;
			    		$("#ftpImgName").val(img_name);
			    		
			    		var imageSize = obj.imageSize;
			    		$("#imageSize").val(imageSize);
			    	}
			    },
			    'onInit': function () { //载入时触发, 作用取消进度条 .
		              $("#file_upload-queue").hide();
		            },
			    'onSelect' : function(file){
			    	var name = file.name;
			    	$("#imgName").val(name); //显示文件名字 
			    }
			});
});
JS代码是uploadify的核心,现在重点解释一下:

'swf' :参数是引用uploadify的路径, 后面跟的时间参数是为了解决一些浏览器兼容的问题;

'uploader':参数是请求进入后台Controller的路径;后面跟的参数 jsession 主要是为了解决再上传过程中出 现的302问题;详细解答:http://blog.csdn.net/chunqiuwei/article/details/23464803

 'buttonText': 参数 是指按钮上的汉字。

 'buttonClass':参数 是指按钮样式

 'height':按钮的高度。(不写默认30PX)

 'width' : 按钮的宽度。(不写默认120PX)这里需要指出的是:按钮宽度和高度参数的值,必须是数字,后 面不能跟PX;

'method': 请求方法。

'multi':参数值为true时,表示支持批量上传。

'fileObjName':参数表示 接受文件名称。

'fileTypeExts':上传文件类型。

'fileSizeLimit':上传文件大小。这里需要说明:当我们设置了'fileTypeExts'的值时,上传类型uploadify会自 动帮我们过滤,也就是所,当点击浏览时,只会出现我们与之匹配的文件类型。不写的话话默认为所有类型都可 以上传(*.*); 当我们设置了'fileSzieLimit'这个参数的值时,上传文件大小也不需要我们关系,当选择上传文件大 小超 过设定的值,插件会自动弹出如下图:

JAVA + uploadify 3.2.1 + Spring MVC + FTP 上传图片_第3张图片

一大串英文,不是我们想要的,这是我的解决方法是修改其原有的JS 代码, 改成自己需要的弹窗提示,如下图:

JAVA + uploadify 3.2.1 + Spring MVC + FTP 上传图片_第4张图片

这样问题解决了,在前台页面uploadify就能帮我们处理,不需要我们在后台获取进行判断;

'onUploadSuccess' : 函数,当文件上传完成并且成功时,所执行的函数;

在uploadify插件中海油很多参数和函数,如果想要了解的更多可以参看官方文档:

http://www.uploadify.com/documentation/

2. Controller 部分

代码如下:

@RequestMapping(value="uploadify",method=RequestMethod.POST)
	@ResponseBody
	public String uploadifyImg(HttpServletRequest request, HttpServletResponse response){
		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
		MultipartFile file = multipartRequest.getFile("file");//获取文件对象
		JSONObject json = new JSONObject();
		try {
			if(file != null){
				 Dimension dimension = Imaging.getImageSize(file.getBytes());
	             int width = (int) dimension.getWidth() ;
	             int height = (int) dimension.getHeight();
	             String imageSize = width + "x" + height;
                 
                 json.put("imageSize", imageSize);
				
				String originalFilename = file.getOriginalFilename(); //文件名称
				String suffix = originalFilename.indexOf(".") != -1 ? originalFilename.substring(
						originalFilename.lastIndexOf("."), originalFilename.length()) : "";
				//图片存放的临时目录
				String tempDir = request.getSession().getServletContext().getRealPath("/") + UPLOAD_FILE_PATH;
				File dir = new File(tempDir);//判断目录是否存在
		        if (!dir.exists()) {
		            dir.mkdirs();
		        }
		        //uuid + .jpg 组成上传FTP文件名
		        String uuid = UUID.randomUUID().toString().replaceAll("\\-", "");
				String img_name = new StringBuffer(uuid).append(suffix).toString();
				
				json.put("img_name", img_name);
				
				String imgPath = new StringBuffer(tempDir).append(img_name).toString();//文件上传的临时目录
				
				file.transferTo(new File(imgPath));//把文件放入临时目录
				
				String img_url = new StringBuffer(UPLOAD_FILE_PATH).append(img_name).toString();//前台展示未见的路径
				
				json.put("img_url",img_url);
				
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return json.toString();
	}
这样返回前台,页面就可以再不刷新的情况下把图片上传到本地根目录下的upload目录中,并且名字也用了UUID做了处理,不会出现乱码;
本地根目录下有了图片,接下来就是在用户点击上传按钮时,把本地图片上传到FTP上面并且删除本地的图片;
上传FTP这段代码就不写了,主要讲讲uploadify上传图片页面无刷新,本地目录有了图片那么接下来就简单了。
博客写的不多,技术有限,如有问题可以留言也可以 加QQ 3077802130 互相交流学习,新申请的QQ专门为了技术交流。


    

  

你可能感兴趣的:(JAVA + uploadify 3.2.1 + Spring MVC + FTP 上传图片)