大文件裁剪阿里云oss上传 plupload

亲测有效

home/include_upload_maxfile.jsp

效果如下

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();

%><%@page import="com.home.base.DBRow"%>
<%@page import="com.home.control.AdminLoggerBean"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>大文件裁剪阿里云oss上传</title>
        <script type="text/javascript" src="js/jquery-1.6.js"></script>
        <style type="text/css">
            
        </style>
    </head>
    <body>
        
        <input type="file" accept="image/*" onchange="getInfo(event)" >
        <div style='display:none' >
        
        <input type="button" id='start_upload' value='开始上传'  style='hidden'>
        <input type="button" id='button_start_nouse' value='button_start_nouse' style='hidden'>
        </div>
        <div id='console' >
        </div>
        <!--https://www.cnblogs.com/2050/p/3913184.html-->
        <!-- 阿里云上传 开始 -->                                                <link rel="stylesheet" type="text/css" href="oss-h5-upload/style.css"/>
                                                
                            <script type="text/javascript" src="oss-h5-upload/lib/crypto1/crypto/crypto.js"></script>
                            <script type="text/javascript" src="oss-h5-upload/lib/crypto1/hmac/hmac.js"></script>
                            <script type="text/javascript" src="oss-h5-upload/lib/crypto1/sha1/sha1.js"></script>
                            <script type="text/javascript" src="oss-h5-upload/lib/base64.js"></script>
                            <script type="text/javascript" src="oss-h5-upload/lib/plupload-2.1.2/js/plupload.full.min.js"></script>
                            <script type="text/javascript" >
                            accessid= '12323';
                            accesskey= '12323asdfasdfas';
                            host = 'http://static.12345.com';
                            g_dirname = ''
                            g_object_name = ''
                            g_object_name_type = ''
                            now = timestamp = Date.parse(new Date()) / 1000; 
                            var policyText = {
                                "expiration": "2031-01-01T12:00:00.000Z", //设置该Policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了
                                "conditions": [
                                ["content-length-range", 0, 1048576000] // 设置上传文件的大小限制
                                ]
                            };
                            
                            var policyBase64 = Base64.encode(JSON.stringify(policyText))
                            message = policyBase64
                            var bytes = Crypto.HMAC(Crypto.SHA1, message, accesskey, { asBytes: true }) ;
                            var signature = Crypto.util.bytesToBase64(bytes);
                            function getNowFormatDate() {
                                var date = new Date();
                                var seperator1 = "-";
                                var year = date.getFullYear();
                                var month = date.getMonth() + 1;
                                var strDate = date.getDate();
                                if (month >= 1 && month <= 9) {
                                    month = "0" + month;
                                }
                                if (strDate >= 0 && strDate <= 9) {
                                    strDate = "0" + strDate;
                                }
                                var currentdate = year + seperator1 + month + seperator1 + strDate;
                                return currentdate;
                            }
                            function get_dirname()
                            {
                                dir = document.getElementById("dirname").value;
                                if (dir != '' && dir.indexOf('/') != dir.length - 1)
                                {
                                    dir = dir + '/'
                                }
                                //alert(dir)
                                g_dirname = dir
                            }
                            
                            function random_string(len) {
                              len = len || 32;
                              var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';   
                              var maxPos = chars.length;
                              var pwd = '';
                              for (i = 0; i < len; i++) {
                                  pwd += chars.charAt(Math.floor(Math.random() * maxPos));
                                }
                                return pwd;
                            }
                            
                            function get_suffix(filename) {
                                pos = filename.lastIndexOf('.')
                                suffix = ''
                                if (pos != -1) {
                                    suffix = filename.substring(pos)
                                }
                                return suffix;
                            }
                            
                            
                            
                            function set_upload(up,filename, ret)
                            
                            {
                             var suffix = get_suffix(filename)
                            
                                var first='static/';
                            
                                    g_object_name = ''+first+getNowFormatDate()+'/' + random_string(10) + suffix
                                var new_multipart_params = {
                                'key' : g_object_name,
                                'policy': policyBase64,
                                'OSSAccessKeyId': accessid, 
                                'success_action_status' : '200', //让服务端返回200,不然,默认会返回204
                                'signature': signature
                                };
                                 new_multipart_params;
                               
                              up.setOption({
                                    'url': host,
                                    'multipart_params': new_multipart_params
                                });
                                
                            }
             //实例化一个plupload上传对象
    var uploader = new plupload.Uploader({
        'url': host,
        browse_button : 'button_start_nouse', //触发文件选择对话框的按钮,为那个元素id
         flash_swf_url : 'oss-h5-upload/lib/plupload-2.1.2/js/Moxie.swf',
        silverlight_xap_url : 'oss-h5-upload/lib/plupload-2.1.2/js/Moxie.xap',
        max_file_size: '2mb'
    });    

                    
    
    
    //绑定各种事件,并在事件监听函数中做你想做的事
    uploader.bind('FilesAdded',function(uploader,files){
        
        console.log(":FilesAdded");    
        //每个事件监听函数都会传入一些很有用的参数,
        //我们可以利用这些参数提供的信息来做比如更新UI,提示上传进度等操作
    });
    
    uploader.bind('BeforeUpload',function(uploader,files){
        console.log("BeforeUpload");    
        set_upload(uploader, files.name, true);
        var tmp=$("#console").html();
        tmp=tmp+"<p style='text-align:center'><span style='color:black;font-weight: bold;'>0%</span></p>";
        $("#console").html(tmp);
    });
    
    uploader.bind('UploadProgress',function(uploader,file){
        //每个事件监听函数都会传入一些很有用的参数,
         var str=file.percent;
        console.log("UploadProgress-"+str);    
        //我们可以利用这些参数提供的信息来做比如更新UI,提示上传进度等操作
                                    $("#console").find('span').text("上传"+str+"%");    
    });
    uploader.bind('FileUploaded',function(up, file, info){
        console.log("得到文件:FileUploaded");    
          if (info.status == 200){
                var url=host+"/"+g_object_name;
            
                    $("#console").html("<img width=100px src='" + url + "' />");
            }else{
                alert('error');
                
            }
    
        //每个事件监听函数都会传入一些很有用的参数,
        //我们可以利用这些参数提供的信息来做比如更新UI,提示上传进度等操作
    });
                    
        //最后给"开始上传"按钮注册事件
    document.getElementById('start_upload').onclick = function(){
        uploader.start(); //调用实例对象的start()方法开始上传文件,当然你也可以在其他地方调用该方法
    }
    //在实例对象上调用init()方法进行初始化
    uploader.init();
        function getInfo(event){
        
            let reader = new FileReader();
            //这里把一个文件用base64编码
            reader.readAsDataURL(event.target.files[0]);            
            reader.onload = function(e){
                let newImg = new Image();
                //获取编码后的值,也可以用this.result获取
                newImg.src = e.target.result;
                newImg.onload = function () {
                    /* 获取  this.height tthis.width*/
                    var dataURL = compress(newImg,this.width,this.height,0.8);
                    /*为了兼容ios 需要 dataURL-> blob -> file */
                    var blob = dataURLtoBlob(dataURL);        // dataURL-> blob 
                    var tmpName="tmpName.jpg";//强制.jpg
                    var file = blobToFile(blob, tmpName);        // blob -> file
                    console.log("得到文件:"+file);    
                    console.log("压缩后大小:"+file.size/1024);                
                    $("#console").html("<img width=100px src='" + dataURL + "' />");
                    uploader.addFile(file);
                    $('#start_upload').click();
                }
            }
            
        }    
                
        function compress(img, width, height, ratio) { // img可以是dataURL或者图片url
            /*    如果宽度大于 750 图片太大 等比压缩     */
            if(width > 750){
                var ratio = width/height;
                width = 750;
                height = 750/ratio;
            }        
            var canvas, ctx, img64;
            canvas = document.createElement('canvas');
            canvas.width = width;
            canvas.height = height;
            
 
            ctx = canvas.getContext("2d");
            ctx.drawImage(img, 0, 0, width, height);
            /* canvas.toDataURL(mimeType(图片的类型), qualityArgument(图片质量)) */
            img64 = canvas.toDataURL("image/jpeg", ratio);
      
            return img64; // 压缩后的base64串
        }
        //将base64转换为blob
        function dataURLtoBlob (dataurl) { 
            var arr = dataurl.split(','),
                mime = arr[0].match(/:(.*?);/)[1],
                bstr = atob(arr[1]),
                n = bstr.length,
                u8arr = new Uint8Array(n);
            while (n--) {
                u8arr[n] = bstr.charCodeAt(n);
            }
            return new Blob([u8arr], { type: mime });
        }
        //将blob转换为file
        function blobToFile(theBlob, fileName){
           theBlob.lastModifiedDate = new Date();
           theBlob.name = fileName;
           return theBlob;
        }
    </script>
    </body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值