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(/[\r\n]/g,"<br>").replace(/[\r]/g,"<br>").replace(/[\n]/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:{
                    // 壓縮后的尺寸
                    width: 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;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM