`

ajaxFileUpload上传图片预览总结

阅读更多

     

      背景:我们平时在做项目的时候,肯定会遇到上传头像、图片、文件等异步上传的功能,今天就以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();
       }
    }

 

      

2
0
分享到:
评论
4 楼 wenm168 2017-01-08  
Ajaxfileupload异步上传隐藏“选择提交”,不同浏览器JSON返回数据解决:http://www.anyrt.com/blog/list/ajaxfileupload.html
3 楼 Haber丿 2015-11-16  
isucre 写道
在firefox 下可以。IE9不行。在IE9下不使用onchange事件和隐藏file,直接使用click事件,却可以。求解

isucre 写道
IE9 下可以吗,我的不行


IE9以下不行是因为被浏览器的安全策略阻止了,详情可以看这里→→
   http://segmentfault.com/a/1190000003759070
2 楼 isucre 2015-08-12  
在firefox 下可以。IE9不行。在IE9下不使用onchange事件和隐藏file,直接使用click事件,却可以。求解
1 楼 isucre 2015-08-12  
IE9 下可以吗,我的不行

相关推荐

    PHP ajaxfileupload上传,jcrop图片裁剪

    总结,通过结合PHP、AJAX和Jcrop,我们可以构建一个用户友好的图片上传和裁剪系统,提升用户体验,同时也展示了Web开发中的前后端交互和图像处理技术。在实际项目中,你可以根据具体需求进行定制和优化。

    JFinal使用ajaxfileupload实现图片上传及预览

    总结来说,使用JFinal和ajaxfileupload实现图片上传及预览,前端主要负责用户交互和文件上传,后台则处理文件的接收和保存。这个过程涉及到了HTML、JavaScript、jQuery、以及Java的文件操作。通过前后端的协作,我们...

    方便自己下载的ajaxfileupload.js备份

    总结来说,"方便自己下载的ajaxfileupload.js备份"是一个适用于前端开发者的实用资源,它结合了jQuery和Ajax技术,提供了便捷的图片异步上传功能。开发者可以通过引入这两个文件,轻松地在自己的项目中实现图片上传...

    php+ajaxfileupload错误修正版+json

    jQuery的ajaxfileupload.js插件可以解析这个响应,根据返回的状态更新UI,例如显示上传成功或失败的消息,以及新上传的图片预览。 index.htm是网页的主入口文件,它可能包含了HTML结构、CSS样式和JavaScript代码,...

    Ajax 上传图片并预览的简单实现

    在提供的代码中,图片预览功能是通过Ajax上传成功后,将返回的图片URL插入到页面指定的`&lt;div&gt;`容器中来实现的。这里使用了JavaScript动态地向`div`中添加`&lt;img&gt;`标签,并设置图片的宽度和高度,来控制图片的显示效果...

    ajaxFileUpload及Flex,jquery学习相关

    这个文件可能是用来测试TinyMCE如何与AJAX File Upload结合,允许用户上传图片或其他文件到服务器。 `change_notes.txt`可能包含了软件或项目更改记录,记录了每次版本更新的细节,包括修复的问题、新增的功能和...

    ajax 异步上传图片

    总结来说,Ajax异步上传图片是通过JavaScript和XMLHttpRequest对象实现的,`ajaxFileUpload`库则简化了这一过程。在实际应用中,还需要考虑错误处理、文件大小限制、多文件上传等问题,以提供更完善的用户体验。同时...

    ajax上传图片

    在HTML5中,File API的引入进一步简化了处理用户选择的文件,包括图片,可以方便地读取文件内容并进行预览或上传。 二、本地提交的Ajax图片上传实现 1. 创建HTML表单:首先,我们需要一个包含文件输入控件的HTML...

    基于Ajaxupload的多文件上传操作

    当文件上传成功后,图片预览会更新为新上传的文件,而文本输入框可以用于后续处理。 总结来说,这个示例展示了如何利用Ajaxupload库实现多文件异步上传功能。它涉及到了前端的JavaScript处理、文件选择事件、以及与...

    php结合imgareaselect实现图片裁剪

    同时,为了处理图片上传,我们还需要`ajaxfileupload.js`。以下是一个简单的HTML结构示例: ```html &lt;!DOCTYPE html&gt; &lt;!-- 省略表单部分 --&gt; &lt;script src="/js/jquery.js"&gt;&lt;/script&gt; ...

Global site tag (gtag.js) - Google Analytics