• ajax+fromData 上传图片


    ajax+fromData 上传图片
    2016年08月10日 18:04:17
    阅读数:2902


    前台部分:

    1.图片文件需要预览,网页因安全考虑,不允许image加载本地路径图片,借鉴滤镜法进行图片预览

    html部分:

    [html] view plain copy
    1. <label class="form-label col-xs-4 col-sm-3">照片:</label>  
    2.                 <div class="col-xs-8 col-sm-9">  
    3.                     <img class="col-xs-4 col-sm-3 " id="serverImage" name="serverImage">  

    依然使用image作为图片容器

    js部分:

    [javascript] view plain copy
    1. function srcChanged(imagId,fileId){  
    2.          var pic = document.getElementById(imagId);  
    3.             var file = document.getElementById(fileId);  
    4.             if(window.FileReader){//chrome,firefox7+,opera,IE10,IE9,IE9也可以用滤镜来实现  
    5.                oFReader = new FileReader();  
    6.                oFReader.readAsDataURL(file.files[0]);  
    7.                oFReader.onload = function (oFREvent) {pic.src = oFREvent.target.result;};          
    8.             }  
    9.             else if (document.all) {//IE8-  
    10.                 file.select();  
    11.                 var reallocalpath = document.selection.createRange().text//IE下获取实际的本地文件路径  
    12.                 if (window.ie6) pic.src = reallocalpath; //IE6浏览器设置img的src为本地路径可以直接显示图片  
    13.                 else { //非IE6版本的IE由于安全问题直接设置img的src无法显示本地图片,但是可以通过滤镜来实现,IE10浏览器不支持滤镜,需要用FileReader来实现,所以注意判断FileReader先  
    14.                     pic.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='image',src="" + reallocalpath + "")";  
    15.                     pic.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';//设置img的src为base64编码的透明图片,要不会显示红xx  
    16.                 }  
    17.             }  
    18.             else if (file.files) {//firefox6-  
    19.                 if (file.files.item(0)) {  
    20.                     url = file.files.item(0).getAsDataURL();  
    21.                     pic.src = url;  
    22.                 }  
    23.             }  
    24.     }  
    以上  即可实现图片预览 

    2.文件的传输:使用ajax搭配fromData

    首先需要对from进行fromData的序列处理,之后遍可以通过ajax将数据传输到后台,后台对收到的request进行处理,取出所需参数

    html:

    [html] view plain copy
    1. <form class="form form-horizontal" action="" id="formServerUpdate">  
    2.             <div class="row cl">  
    3.                 <label class="form-label col-xs-4 col-sm-3">照片:</label>  
    4.                 <div class="col-xs-8 col-sm-9">  
    5.                     <img class="col-xs-4 col-sm-3 " id="serverImage" name="serverImage">  
    6.                     <span class="btn-upload form-group mt-50"> <a  
    7.                         href="javascript:void();" class="btn btn-primary radius"><i  
    8.                             class="Hui-iconfont"></i> 更改图片 </a> <input type="file"  
    9.                         id="imageFile" onchange="srcChanged('serverImage','imageFile') "  
    10.                         name="imageFile" accept="image/*" class="input-file">  
    11.                     </span>  
    12.                 </div>  
    13.             </div>  
    14.             <div class="row cl">  
    15.                 <div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3">  
    16.                     <input id="btnSubmit" class="btn btn-success radius size-L"  
    17.                         type="button" value="  提交  ">  
    18.                 </div>  
    19.             </div>  
    20.         </form>  
    js:
    [javascript] view plain copy
    1. $("#btnSubmit").click(  
    2.   
    3.             function(){  
    4.                     if (!check ().form ())  
    5.                         return;  
    6.                 var oData = new FormData($("#formServerUpdate")[0] ); //记得别掉了[0],不然后台得不到sh  
    7.                 $.ajax({  
    8.                     type : 'post',//请求方式为post  
    9.                     datatype : 'json',//服务端返回的数据类型  
    10.                     url : "server/updateServer",//接收数据的映射接口  
    11.                     data : oData,  
    12.                     /**    
    13.                      * 必须false才会避开jQuery对 formdata 的默认处理    
    14.                      * XMLHttpRequest会对 formdata 进行正确的处理    
    15.                      */    
    16.                     processData : false,  
    17.                     contentType : false,//"application/x-www-form-urlencoded",//直接用对象接收时,必须这么写;若要发送json格式数据,可写成“application/json”,用注解@RequestBody String str接收  
    18.                     success : function(data) {  
    19.                         var arr = eval("(" + data  
    20.                                 + ")");  
    21.                         //                          alert(arr.login);  
    22.                         if (arr.state == "true") {  
    23.                             //                              alert("sdsadsa");  
    24.                             alert("修改成功");  
    25.                             window.parent.location.reload();  
    26.                         } else {  
    27.                             alert("出了点小问题,请稍候重试");  
    28.                         }   
    29.   
    30.                           
    31.                     },//ajax请求成功后调用该方法  
    32.                     error :   
    33.                         function(XMLHttpRequest, textStatus, errorThrown) {  
    34.                          alert(XMLHttpRequest.status);  
    35.                          alert(XMLHttpRequest.readyState);  
    36.                          alert(textStatus);  
    37.                            }  
    38.   
    39.                 })  
    40.             });  
    java后台接受与处理:

    [java] view plain copy
    1. @RequestMapping( value = "/updateServer", method = RequestMethod.POST )  
    2.     @ResponseBody  
    3.     public updateServer( HttpServletRequest request )  
    4.     {  
    5.         Server server = new Server();  
    6.         MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest)request;  
    7.         Map<String, Object> result = null;  
    8.         try  
    9.         {  
    10.   
    11.             MultipartFile file = mRequest.getFile( "imageFile" );  
    12.             String fileName = file.getOriginalFilename();  
    13.             String serverCardId = mRequest.getParameter( "serverCardId" );  
    14.             if ( StringUtils.isNotBlank( fileName ) )//确保前天提交来的表单中有file  
    15.             {  
    16.                 String strFilePath = request.getServletContext()  
    17.                         .getRealPath( "/" ) + "upload/photo/";//将文件保存到本地路径  
    18.                 String serverPhotoSrc = FileSave.fileSaveSrc( file,  
    19.                         serverCardId, strFilePath );//将文件保存,并返回文件名  
    20.             }  
    21.   
    22.         }  catch ( IOException e )  
    23.         {  
    24.             // TODO Auto-generated catch block  
    25.             e.printStackTrace();  
    26.         } catch ( Exception e )  
    27.         {  
    28.             e.printStackTrace();  
    29.         }  
    30.     }  
    ps:关于文件的保存方法

    [java] view plain copy
    1. public static String fileSaveSrc( MultipartFile file, String fileName,  
    2.            String fileSrc ) throws IOException  
    3.    {  
    4.        String fileOriginalName = file.getOriginalFilename();  
    5.        if ( StringUtils.isNotBlank( fileOriginalName ) )//确保传入file不是null  
    6.        {  
    7.            String fileType = fileOriginalName  
    8.                    .substring( fileOriginalName.lastIndexOf( "." ) );//得到文件后缀名  
    9.              
    10.            String tempName = fileName + fileType;<span style="font-family: Arial, Helvetica, sans-serif;">// 使用传入名称替换图片原本名称,防止乱码以及覆盖其他文件问题</span>  
    11.   
    12.            File uploadfile = new File( fileSrc + tempName );//将文件重新组装起来  
    13.            if ( !uploadfile.exists() )  
    14.            {  
    15.                uploadfile.mkdirs();//创建文件  
    16.            }  
    17.            file.transferTo( uploadfile );//将文件上传保存  
    18.            return tempName;//成功返回文件名  
    19.        } else  
    20.        {  
    21.            return "";  
    22.        }  
    23.   
    24.    }  
  • 相关阅读:
    C语言复习---杨辉三角打印
    C语言复习---获取矩阵的对角和
    C语言复习---选择法排序
    C语言复习---用筛选法求100之内的素数
    C语言复习---比赛问题
    C语言复习---打印菱形
    建立一个node.js服务器(使用express搭建第一个Web环境)
    nodejs小问题:express不是内部或外部命令
    使用express搭建第一个Web应用【Node.js初学】
    Node.js 相关资料网站汇总
  • 原文地址:https://www.cnblogs.com/hsdying/p/9012543.html
Copyright © 2020-2023  润新知