背景:我们平时在做项目的时候,肯定会遇到上传头像、图片、文件等异步上传的功能,今天就以ajaxFileupload组件上传头像为例总结一下该组件的用法。
Tips: 我在以前的博客中分享过三种上传组件,其实主要代码已经在这篇文章体现了,今天再次总结一下ajaxfileupload这个组件,发现在高版本(1.9以上)的Jquery下ajaxfileupload提示异常,然后我就把ajaxfileupload的jQuery对象都替换成了$就可使用了,对于ajaxFileUpload 报这错jQuery.handleError is not a function,请猛戳 这里,对就是这里。附件是修改好可使用的ajaxfileupload.js文件。
需求:自定义样式【上传】按钮,点击之后【上传】按钮,打开文件选择对话框,选择文件后自动上传,并可预览该图片。
分析:
1.【上传】按钮是a链接,但是上传文件必然需要一个input type="file"的元素,在点击a链接这个【上传】按钮的时候,触发input type="file"元素的click方法打开文件选择对话框,选择文件后,触发input type="file" 的onchange方法,然后调用ajaxfileupload的上传方法开始上传。
2.服务器端,接收此文件数据,保存到文件服务器上,返回此文件的相对路径,放入一个隐藏域,最后提交表单时,将此相对路径提交给后台保存入库。
3.预览,通过获取图片的流数据显示图片。
用到的技术:jquery,ajaxfileupload,springMVC
代码:
1.HTML片段
<div class="uploadPicture"> <img id="imgHead" src="" width="106" height="122" alt="头像"> <input type="file" onchange="uploadHead();" id="basicInfoHead" style="display:none;" name="basicInfoHead" /> <input type="hidden" id="basicHeadUrl" > <a href="#basicInfo" id="uploadBasicInfoHead" >上传头像</a> </div>
2.JS代码
//上传头像,触发click方法 $('#uploadBasicInfoHead').on('click',function(){ $('#basicInfoHead').click(); }); function uploadHead(){ $.ajaxFileUpload({ url:"${pageContext.request.contextPath}/profile/uploadBasicHead",//需要链接到服务器地址 secureuri:false, fileElementId:"basicInfoHead",//文件选择框的id属性 dataType: 'json', //json success: function (data) { $("#imgHead").attr("src","${pageContext.request.contextPath}/profile/readImage?imagePath="+data.imagePath); $('#basicHeadUrl').val(data.imagePath); },error:function(XMLHttpRequest, textStatus, errorThrown){ alert('上传失败!'); } }); };
3.JAVA代码
//上传文件方法 @RequestMapping(value = "profile/uploadBasicHead", produces = "text/plain;charset=UTF-8") @ResponseBody public String ajaxUpload(HttpServletRequest request) throws IllegalStateException, IOException { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; String fileName = ""; String uploadPath = "uploadFile/head/"; String path =request.getSession().getServletContext().getRealPath("/")+uploadPath; /*File uploadPathFile = new File(path); if (!uploadPathFile.exists()) { uploadPathFile.mkdir(); }*/ String realPath = ""; for (Iterator it = multipartRequest.getFileNames(); it.hasNext();) { String key = (String) it.next(); MultipartFile mulfile = multipartRequest.getFile(key); fileName = mulfile.getOriginalFilename(); fileName = handlerFileName(fileName); File file = new File(path + retFileName); mulfile.transferTo(file); } realPath = "{\"imagePath\":\""+uploadPath+fileName+"\"}"; return realPath; } //文件名称处理 private String handlerFileName(String fileName) { //处理名称start fileName = (new Date()).getTime()+"_"+fileName; //时间戳+文件名,防止覆盖重名文件 String pre = StringUtils.substringBeforeLast(fileName, "."); String end = StringUtils.substringAfterLast(fileName, "."); fileName = Digests.encodeByMd5(pre)+"."+end;//用MD5编码文件名,解析附件名称 //处理名称end return fileName; } //预览,获取图片流 @RequestMapping(value = "profile/readImage", produces = "text/plain;charset=UTF-8") public void readImage(HttpServletRequest request, HttpServletResponse response){ String imagePath = request.getSession().getServletContext().getRealPath("/")+request.getParameter("imagePath"); try{ File file = new File(imagePath); if (file.exists()) { DataOutputStream temps = new DataOutputStream(response .getOutputStream()); DataInputStream in = new DataInputStream( new FileInputStream(imagePath)); byte[] b = new byte[2048]; while ((in.read(b)) != -1) { temps.write(b); temps.flush(); } in.close(); temps.close(); } } catch (Exception e) { e.printStackTrace(); } }
相关推荐
总结,通过结合PHP、AJAX和Jcrop,我们可以构建一个用户友好的图片上传和裁剪系统,提升用户体验,同时也展示了Web开发中的前后端交互和图像处理技术。在实际项目中,你可以根据具体需求进行定制和优化。
总结来说,使用JFinal和ajaxfileupload实现图片上传及预览,前端主要负责用户交互和文件上传,后台则处理文件的接收和保存。这个过程涉及到了HTML、JavaScript、jQuery、以及Java的文件操作。通过前后端的协作,我们...
总结来说,"方便自己下载的ajaxfileupload.js备份"是一个适用于前端开发者的实用资源,它结合了jQuery和Ajax技术,提供了便捷的图片异步上传功能。开发者可以通过引入这两个文件,轻松地在自己的项目中实现图片上传...
jQuery的ajaxfileupload.js插件可以解析这个响应,根据返回的状态更新UI,例如显示上传成功或失败的消息,以及新上传的图片预览。 index.htm是网页的主入口文件,它可能包含了HTML结构、CSS样式和JavaScript代码,...
在提供的代码中,图片预览功能是通过Ajax上传成功后,将返回的图片URL插入到页面指定的`<div>`容器中来实现的。这里使用了JavaScript动态地向`div`中添加`<img>`标签,并设置图片的宽度和高度,来控制图片的显示效果...
这个文件可能是用来测试TinyMCE如何与AJAX File Upload结合,允许用户上传图片或其他文件到服务器。 `change_notes.txt`可能包含了软件或项目更改记录,记录了每次版本更新的细节,包括修复的问题、新增的功能和...
总结来说,Ajax异步上传图片是通过JavaScript和XMLHttpRequest对象实现的,`ajaxFileUpload`库则简化了这一过程。在实际应用中,还需要考虑错误处理、文件大小限制、多文件上传等问题,以提供更完善的用户体验。同时...
在HTML5中,File API的引入进一步简化了处理用户选择的文件,包括图片,可以方便地读取文件内容并进行预览或上传。 二、本地提交的Ajax图片上传实现 1. 创建HTML表单:首先,我们需要一个包含文件输入控件的HTML...
当文件上传成功后,图片预览会更新为新上传的文件,而文本输入框可以用于后续处理。 总结来说,这个示例展示了如何利用Ajaxupload库实现多文件异步上传功能。它涉及到了前端的JavaScript处理、文件选择事件、以及与...
同时,为了处理图片上传,我们还需要`ajaxfileupload.js`。以下是一个简单的HTML结构示例: ```html <!DOCTYPE html> <!-- 省略表单部分 --> <script src="/js/jquery.js"></script> ...