zoukankan      html  css  js  c++  java
  • js实现图片预览

    (1)图片预览

           showPic:function(url){
               var json = {
                       "data": [   //相册包含的图片,数组格式
                         {
                           "src": url, //原图地址
                         }
                       ]
                     };
               top.layer.photos({
                    photos: json
                    ,anim: 0 //0-6的选择,指定弹出图片动画类型,默认随机(请注意,3.0之前的版本用shift参数)
                  });
               
           },

    (2)日期的格式化

            dateFormat:function (timestamp, format) {
              var _this =  new Date(timestamp);
               var o = {
                   "M+": _this.getMonth() + 1,
                   // month
                   "d+": _this.getDate(),
                   // day
                   "h+": _this.getHours(),
                   // hour
                   "m+": _this.getMinutes(),
                   // minute
                   "s+": _this.getSeconds(),
                   // second
                   "q+": Math.floor((_this.getMonth() + 3) / 3),
                   // quarter
                   "S": _this.getMilliseconds()
                   // millisecond
               };
               if (/(y+)/.test(format) || /(Y+)/.test(format)) {
                   format = format.replace(RegExp.$1, (_this.getFullYear() + "").substr(4 - RegExp.$1.length));
               }
               for (var k in o) {
                   if (new RegExp("(" + k + ")").test(format)) {
                       format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
                   }
               }
               return format;
           }

    (3)escapeHTML将< > & " '转成字符实体 

    escapeHTML: function(a){  
                a = "" + a;  
                return a.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");;  
            }

    使用场景: 
    (1)用户在页面中录入(比如输入框) <script>alert(2);</script>, js将该内容提交给后端保存 
    (2)显示时,后端将字符串返回前端;js接收到之后: 
    a, 使用escapeHTML,将字符串转为 &lt;script&gt;alert(2);&lt;/script&gt;此时,浏览器将能正确解析,因为浏览器接收到实体字符后,转成对应的尖括号等。 
    b, 不使用escapeHTML,浏览器一看到<,便认为是html标签的开始,直接把刚才的字符串当脚本执行了,这就是xss漏洞。

    (4)unescapeHTML 还原html脚本 < > & " ' 

     unescapeHTML: function(a){  
                a = "" + a;  
                return a.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&").replace(/&quot;/g, '"').replace(/&apos;/g, "'");  
            },

    (5)Ajax上传文件

     uploadFile: function (fileObj, url,callback) {
                var data = new FormData(fileObj);
                // data.append("CustomField", "This is some extra data, testing");//如果要添加参数
                $.ajax({
                    type: "POST",
                    enctype: 'multipart/form-data',
                    url: url,
                    data: data,
                    processData: false, //prevent jQuery from automatically transforming the data into a query string
                    contentType: false,
                    cache: false,
                    timeout: 600000,
                    success: function (result) {
                        callback(result);
                    },
                    error:function(xhr, textStatus){
                        if(xhr.status == 0){
                            jp.info("连接失败,请检查网络!")
                        }else if(xhr.status == 404){
                            var errDetail ="<font color='red'>404,请求地址不存在!</font>";
                            top.layer.alert(errDetail , {
                                icon: 2,
                                area:['auto','auto'],
                                title:"请求出错"
                            })
                        }else if(xhr.status && xhr.responseText){
                            var errDetail ="<font color='red'>"+ xhr.responseText.replace(/[
    ]/g,"<br>").replace(/[
    ]/g,"<br>").replace(/[
    ]/g,"<br>")+"</font>";
                            top.layer.alert(errDetail , {
                                icon: 2,
                                area:['80%','70%'],
                                title:xhr.status+"错误"
                            })
                        }else{
                            var errDetail =xhr.responseText=="<font color='red'>未知错误!</font>";
                            top.layer.alert(errDetail , {
                                icon: 2,
                                area:['auto','auto'],
                                title:"真悲剧,后台抛出异常了"
                            })
                        }
    
                    }
                })
            }

    (6)下载

    downloadFile: function(url, name) {
                var $a = $("<a></a>").attr("href", url).attr("download", name);
                $a[0].click();
            },

    (7)返回当前活跃的tab页面关联的iframe的Windows对象,方便layer弹窗调用父页面的方法。

     getParent: function () {
                return top.getActiveTab()[0].contentWindow;
            }

    (8)图片/文件上传

    upImg:function(childPath,btnid,ysk,ysg,quality,minsize,url,callback){
                var uploader = WebUploader.create({
                    // 选完文件后,是否自动上传。
                    auto: true,
                    // swf文件路径
                    swf: './js/webuploader/Uploader.swf',
                    // 文件接收服务端。
                    server: url,
                    //参数
                    formData: {
                        dirPath: childPath
                    },
                    // 选择文件的按钮。可选。
                    // 内部根据当前运行是创建,可能是input元素,也可能是flash.
                    pick: '#'+btnid,
                  //允许重复上传
                    duplicate :true, 
                    // 只允许选择图片文件。
                    accept: {
                        title: 'Images',
                        extensions: 'gif,jpg,jpeg,bmp,png',
                        mimeTypes: 'image/*'
                    },
                    // 是否压缩图片, 默认如果是jpeg文件上传前会压缩,如果是false, 则图片在上传前不进行压缩
                    compress:{
                        // 压缩后的尺寸
                         ysk,
                        height: ysg,
                        // 图片质量,只有type为image/jpeg的时候才有效。
                        quality: quality,
                        // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false
                        allowMagnify: false,
                        // 是否允许裁剪
                        crop: false,
                        // 是否保留头部meta信息
                        preserveHeaders: true,
                        // 如果发现压缩后文件大小比原来还大,则使用原来图片,此属性可能会影响图片自动纠正功能
                        noCompressIfLarger: false,
                        // 单位字节,如果图片大小小于此值,不会采用压缩)
                        compressSize:50*1024//50
                    }
                });
            
                // 当有文件添加进来的时候
                uploader.on( 'fileQueued', function( file ) {
                    jp.loading("正在上传")
                });
            
                // 文件上传过程中创建进度条实时显示。
                uploader.on( 'uploadProgress', function( file, percentage ) {
                    $(".cell").css("display", "block");
                });
            
                // 文件上传成功,给item添加成功class, 用样式标记上传成功。
                uploader.on( 'uploadSuccess', function( file, response ) {
                    callback(file,response);
                });
                // 文件上传失败,显示上传出错。
                uploader.on( 'uploadError', function( file ) {
                    jp.error("出错了")
                });
                // 完成上传完了,成功或者失败,先删除进度条。
                uploader.on( 'uploadComplete', function( file ) {
                });
            }

    调用

    upImg("file","upfile",800,800,90,500*1024,'${ctx}/yy/picture/uploadFile',function( file, response){
                    if(response.success){
                         var url = response.body.path;
                           var filename = response.body.fileName;
                           $("#fileName").attr("href",url);
                           $("#fileName").text(filename);
                          jp.success("上传成功");
                    }else{
                        jp.error("出错了")
                    }
                });

    Java代码

    public AjaxJson uploadFile( HttpServletRequest request, HttpServletResponse response) throws Exception {
    
            AjaxJson j = new AjaxJson();
            boolean flag = true;
            j.getBody().put("path", "");
            
            try {
                MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
                String dirPath = "file";
                
                // 获取对应file对象
                Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
                Iterator<String> fileIterator = multipartRequest.getFileNames();
    
                while (fileIterator.hasNext()) {
                    String fileKey = fileIterator.next();
                    // 获取对应文件
                    MultipartFile multipartFile = fileMap.get(fileKey);
                    if (multipartFile.getSize() != 0L) {
    
                        InputStream is = multipartFile.getInputStream();
    
                        String file_name = multipartFile.getOriginalFilename();
                        file_name = RandomStringUtils.randomAlphanumeric(6) + "." + file_name;
    
                        String path = getPath2(dirPath);
                        
                        String filePath = uploadLiu(path, file_name, is);
                        filePath =  filePath.split("/opt")[1];
                        filePath = "https://www.dianzhangmen.cn/"+filePath;
                        j.getBody().put("path", filePath);
                        j.getBody().put("fileName", file_name);
                        
                    }
                }
                j.setMsg("上传成功");
            } catch (IOException e) {
                flag = false;
                j.setMsg("上传失败");
                e.printStackTrace();
                throw new Exception("上传失败");
            }
        
            j.setSuccess(flag);
            return j;
        }
  • 相关阅读:
    BZOJ 3132: 上帝造题的七分钟 树状数组+差分
    PAT Advanced 1006 Sign In and Sign Out (25 分)
    PAT Advanced 1011 World Cup Betting (20 分)
    PAT Basic 1032 挖掘机技术哪家强 (20 分)
    PAT Basic 1028 人口普查 (20 分)
    PAT Basic 1004 成绩排名 (20 分)
    大数据数据库HBase(二)——搭建与JavaAPI
    PAT Advanced 1009 Product of Polynomials (25 分)(vector删除元素用的是erase)
    PAT Advanced 1002 A+B for Polynomials (25 分)(隐藏条件,多项式的系数不能为0)
    PAT Basic 1041 考试座位号 (15 分)
  • 原文地址:https://www.cnblogs.com/excellencesy/p/10574501.html
Copyright © 2011-2022 走看看