文档章节

SpringMVC+ajaxFileUpload 上传文件

Loooooou
 Loooooou
发布于 2015/11/16 15:17
字数 784
阅读 221
收藏 0

在ie内核的低版本浏览器中会出现问题,在返回的Json数据中会自动加上<pre></pre>或者<pre style="word-wrap: break-word; white-space: pre-wrap;"></pre>导致解析不成功。


JS:

//执行上传文件操作的函数
			$.ajaxFileUpload({
				//处理文件上传操作的服务器端地址(可以传参数,已亲测可用)
				url : '${pageContext.request.contextPath}/upload/fileUpload',
				secureuri : false, //是否启用安全提交,默认为false
				fileElementId : 'fileupload', //文件选择框的id属性
				dataType : 'text', //服务器返回的格式,可以是json或xml等
				success : function(data, status) { //服务器响应成功时的处理函数
					data = data.replace("<PRE>", ''); //ajaxFileUpload会对服务器响应回来的text内容加上<pre>text</pre>前后缀
					data = data.replace("</PRE>", '');
					data = data.replace("<pre>", '');
					data = data.replace("</pre>", ''); //本例中设定上传文件完毕后,服务端会返回给前台[0`filepath]
					if(data.indexOf("pre")>0){//对ie/360等浏览器会/ajaxFileUpload会对服务器响应回来的text内容加上<pre style="word-wrap: break-word; white-space: pre-wrap;"> 用正则替换下
						var reg = /<pre.+?>(.+)/g;
						var result = data.match(reg);
						data = RegExp.$1;
					}
					
					if (data.substring(0, 1) == 0) { //0表示上传成功(后跟上传后的文件路径),1表示失败(后跟失败描述)
						$("#attachmentPath").val(data.substring(2));
						$('#result').html("附件上传成功<br/>");
					} else {
						$('#result').html('附件上传失败,请重试!!');
					}
				},
				error : function(data, status, e) { //服务器响应失败时的处理函数
					$('#result').html('附件上传失败,请重试!!');
				}
			});


后台:

@RequestMapping("fileUpload")
	public void fileUpload(@RequestParam MultipartFile[] myfiles, HttpServletRequest request,
			HttpServletResponse response) throws IOException {
		// 这里实现文件上传操作用的是commons.io.FileUtils类,它会自动判断/upload是否存在,不存在会自动创建
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
		java.util.Date date = new java.util.Date();
		String time = sdf.format(date);
		String realPath = request.getSession().getServletContext().getRealPath(uploadFolderName);
		// 设置响应给前台内容的数据格式
		response.setContentType("text/plain; charset=UTF-8");
		// 设置响应给前台内容的PrintWriter对象
		PrintWriter out = response.getWriter();
		// 上传文件的原名(即上传前的文件名字)
		//String originalFilename = null;
		String newImgPath = null;
		// 如果只是上传一个文件,则只需要MultipartFile类型接收文件即可,而且无需显式指定@RequestParam注解
		// 如果想上传多个文件,那么这里就要用MultipartFile[]类型来接收文件,并且要指定@RequestParam注解
		// 上传多个文件时,前台表单中的所有<input
		// type="file"/>的name都应该是myfiles,否则参数里的myfiles无法获取到所有上传的文件
		for (MultipartFile myfile : myfiles) {
			if (myfile.isEmpty()) {
				out.print("1`请选择文件后上传");
				out.flush();
			} else {
				//originalFilename = myfile.getOriginalFilename();
				//System.out.println("文件原名: " + originalFilename);
				//System.out.println("文件名称: " + myfile.getName());
				//System.out.println("文件长度: " + myfile.getSize());
				//System.out.println("文件类型: " + myfile.getContentType());
				//System.out.println("========================================");
				String imgPath = myfile.getOriginalFilename();

				// imgPath为原文件名
				int idx = imgPath.lastIndexOf(".");
				// 文件后缀
				String extention = imgPath.substring(idx);

				java.util.Date dt = new java.util.Date(System.currentTimeMillis());
				SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS");
				String times = fmt.format(dt);

				// 新的文件名(日期+后缀)
				newImgPath = times + extention;
				try {

					// 这里不必处理IO流关闭的问题,因为FileUtils.copyInputStreamToFile()方法内部会自动把用到的IO流关掉
					// 此处也可以使用Spring提供的MultipartFile.transferTo(File
					// dest)方法实现文件的上传
					File targetFile = new File(realPath + "/" + time, newImgPath);
					if (!targetFile.exists()) {
						targetFile.mkdirs();
					}
					// 保存
					myfile.transferTo(targetFile);
				} catch (IOException e) {
					System.out.println("文件[" + newImgPath + "]上传失败,堆栈轨迹如下");
					e.printStackTrace();
					out.print("1`文件上传失败,请重试!!");
					out.flush();
				}
			}
		}
		out.print("0`" + request.getContextPath() + uploadFolderName + time + "/" + newImgPath);
		out.flush();
	}


© 著作权归作者所有

Loooooou
粉丝 0
博文 3
码字总数 1596
作品 0
无锡
私信 提问
SpringMVC+ajaxfileupload文件上传返回json下载?请大神指导!

SpringMVC+ajaxfileupload文件上传返回json下载?请大神指导! 利用ajaxfileupload文件上传,后台处理springmvc 返回json,但是提示下载json...

帐号以作废
2014/04/18
23K
23
SpringMVC+ajaxfileupload文件上传返回json下载?请大神指导!

@纠结的程序猿 你好,想跟你请教个问题: springmvc +ajaxfileupload导入excel返回json出现下载怎么处理 SpringMVC+ajaxfileupload文件上传返回json下载?请大神指导!...

fengzihua
2016/04/27
151
0
springMVC+ajaxfileupload 直接走error

之前用form表单上传,现在换了无刷新。就不灵了 浏览器直接走error,不走success,火狐不报错,,,uc报400. eclipse后台也不报错。。就晕了。 再就是前端 这是uc报的,每次点击之后报这错,...

ploughman
2015/12/10
1K
5
PHP 多文件上传的三种方法

这里介绍三种多文件上传的方法,前两种都是直接遍历三维超全局数组,最后一种是先定义一个单文件上传函数,再循环调用该函数,完成多文件的上传。 成功返回包括文件名的路径。

渺小的尘埃
2013/12/04
5.1K
1
angularJS上传文件

导入 //导入 var uplo

紫枫5966
2017/05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
51分钟前
4
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
52分钟前
7
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
55分钟前
4
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
今天
6
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
6
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部