SpringMVC + ajaxfileupload的多文件上传

最近做一个springmvc ajax多文件上传,倒腾了下,查阅了部分资料搞定了!现在分享:

1.Spring mvc

a.xml配置:

<bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver" ><!– set the max upload size1MB 1048576–><property name="maxUploadSize"><value>52428800</value></property><property name="maxInMemorySize"><value>2048</value></property></bean> b. 服务器端接收解析public void imgUpload(MultipartHttpServletRequest multipartRequest,HttpServletResponse response) throws Exception {response.setContentType("text/html;charset=UTF-8");Map<String, Object> result = new HashMap<String, Object>();//获取多个filefor (Iterator it = multipartRequest.getFileNames(); it.hasNext();) {String key = (String) it.next();MultipartFile imgFile = multipartRequest.getFile(key);if (imgFile.getOriginalFilename().length() > 0) {String fileName = imgFile.getOriginalFilename();//改成自己的对象哦!Object obj = new Object();//Constant.UPLOAD_GOODIMG_URL 是一个配置文件路径try {String uploadFileUrl = multipartRequest.getSession().getServletContext().getRealPath(Constant.UPLOAD_GOODIMG_URL);File _apkFile = saveFileFromInputStream(imgFile.getInputStream(), uploadFileUrl, fileName);if (_apkFile.exists()) {FileInputStream fis = new FileInputStream(_apkFile);} elsethrow new FileNotFoundException("apk write failed:" + fileName);List list = new ArrayList();//将obj文件对象添加到listlist.add(obj);result.put("success", true);} catch (Exception e) {result.put("success", false);e.printStackTrace();}}}String json = new Gson().toJson(result,new TypeToken<Map<String, Object>>() {}.getType());response.getWriter().print(json);}//保存文件private File saveFileFromInputStream(InputStream stream, String path,String filename) throws IOException {File file = new File(path + "/" + filename);FileOutputStream fs = new FileOutputStream(file);byte[] buffer = new byte[1024 * 1024];int bytesum = 0;int byteread = 0;while ((byteread = stream.read(buffer)) != -1) {bytesum += byteread;fs.write(buffer, 0, byteread);fs.flush();}fs.close();stream.close();return file;}2.关于前端代码

a.修改ajaxfileupload.js

先到官网下载该插件.

将源文件的createUploadForm的代码替换如下:

createUploadForm: function(id, fileElementId, data){//create formvar formId = ‘jUploadForm’ + id;var fileId = ‘jUploadFile’ + id;var form = jQuery(‘<form action="" method="POST" name="’ + formId + ‘" id="’ + formId + ‘" enctype="multipart/form-data"></form>’);if (data) {for ( var i in data) {jQuery(‘<input type="hidden" name="’ + i + ‘" value="’+ data[i] + ‘" />’).appendTo(form);}}for (var i = 0; i < fileElementId.length; i ++) {var oldElement = jQuery(‘#’ + fileElementId[i]);var newElement = jQuery(oldElement).clone();jQuery(oldElement).attr(‘id’, fileElementId[i]);jQuery(oldElement).attr(‘name’, fileElementId[i]);jQuery(oldElement).before(newElement);jQuery(oldElement).appendTo(form);}//set attributesjQuery(form).css(‘position’, ‘absolute’);jQuery(form).css(‘top’, ‘-1200px’);jQuery(form).css(‘left’, ‘-1200px’);jQuery(form).appendTo(‘body’);return form;}第一步高定

b. 页面代码

html:

<input type="button" value="添加附件" onclick="createInput(‘more’);" /><div id="more"></div>js:这里可以专门写封装类,以及给file加onchange事件判断文件格式。由于时间有限,未修改var count = 1;/*** 生成多附件上传框*/function createInput(parentId){count++;var str = ‘<div name="div" ><font style="font-size:12px;">附件</font>’+”+ ‘<input type="file" contentEditable="false" id="uploads’ + count + ” +’" name="uploads’+ count +’" value="" style="width: 220px"/><input type="button" value="删除" onclick="removeInput(event)" />’+'</div>’;document.getElementById(parentId).insertAdjacentHTML("beforeEnd",str);}/*** 删除多附件删除框*/function removeInput(evt, parentId){ var el = evt.target == null ? evt.srcElement : evt.target; var div = el.parentNode; var cont = document.getElementById(parentId);if(cont.removeChild(div) == null){return false; } return true;}下面是2个修改多file用的js,用于显示和删除,可以于上面的合并精简代码:function addOldFile(data){var str = ‘<div name="div’ + data.name + ‘" ><a href="#" style="text-decoration:none;font-size:12px;color:red;" onclick="removeOldFile(event,’ + data.id + ‘)">删除</a>’+” + data.name +'</div>’;document.getElementById(‘oldImg’).innerHTML += str;}function removeOldFile(evt, id){//前端隐藏域,用来确定哪些file被删除,这里需要前端有个隐藏域 $("#imgIds").val($("#imgIds").val()=="" ? id :($("#imgIds").val() + "," + id));var el = evt.target == null ? evt.srcElement : evt.target;var div = el.parentNode;var cont = document.getElementById(‘oldImg’);if(cont.removeChild(div) == null){return false;}return true;}ajax上传文件:function ajaxFileUploadImg(id){//获取file的全部idvar uplist = $("input[name^=uploads]");var arrId = [];for (var i=0; i< uplist.length; i++){if(uplist[i].value){arrId[i] = uplist[i].id;}}$.ajaxFileUpload({url:’xxxxx’,secureuri:false,fileElementId: arrId, //这里不在是以前的id了,要写成数组的形式哦!dataType: ‘json’,data: {//需要传输的数据},success: function (data){},error: function(data){}});}

亲们,一个spingmvc +ajax多文件上传有搞定了,功能很简单,有问题联系本人

,如若今生再相见,哪怕流离百世,迷途千年,也愿。

SpringMVC + ajaxfileupload的多文件上传

相关文章:

你感兴趣的文章:

标签云: