JS頭像的預覽和上傳


  小記一次小功能,頭像的預覽和上傳。

  頭像的預覽和上傳依賴前端的幾個機制:

  1. 對於 input ,type 為 file 時瀏覽器會為我們提供文件選擇功能,且選擇文件后可以在該 input 中拿到選取文件的信息,借此通過 JS 將文件讀為二進制或者Base64或者文本格式的串進行后續處理。

  2. JS 中 FileReader 函數的使用,借助該類讀取文件,並通過 onload() 函數注冊讀取完成后的異步事件。下面提供一個樣例,可直接使用:

<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            body{
                font-size: 12px;
            }
            .reHead{
                margin: 15px 4%; 
            }
            .headForm{
                text-align: center;
                padding: 40px 0 70px 0;
            }
            #test-image-preview {
                position: relative;
                display: inline-block;
                width: 100px;
                height: 100px;
                border-radius: 50px;
                background: #F5F5F5;
                color: #fff;
                font-size: 60px;
                text-align: center;
                line-height: 100px;
                background-size: contain;
                background-repeat: no-repeat;
                background-position: center center;
                margin-bottom: 26px;
            }
            .fileHead{
                position: absolute;
                width: 100px;
                height: 100px;
                right: 0;
                top: 0;
                opacity: 0;
            }
            .content-format {
                font-size: 12px;
                font-weight: 400;
                color: rgba(153, 153, 153, 1);
            }
            .headMain{
                height: 40px;
            }
            .file {
                position: relative;
                background: #fff;
                color: #F39800;
                font-weight:800;
            }
            .file input {
                position: absolute;
                font-size: 12px;
                right: 0;
                top: 0;
                opacity: 0;
            }
            .fileName {
                line-height: 28px;
                font-size: 12px;
                font-weight: 400;
                color: rgba(51, 51, 51, 1);
            }
            .but{
                text-align: center;
            }
            .orangeHead{
                width: 40%;
                height: 40px;
                background: #f60;
                border: none;
            }
            .orangeHead a{
                color: #fff;
            }
        </style>
    </head>
    <body>

        <div class="reHead">
             <P class="content-format">頭像支持jpg、png、jpeg格式,文件大小最大不能超過1M</P>
             <div class="content">
                 <form method="post" enctype="multipart/form-data" id="file_upload" class="headForm">
                     <div id="test-image-preview" class="iconfont icon-bianjitouxiang">
                          <input type="file" name="test" id="test-image-file" class="fileHead" accept="image/gif, image/jpeg, image/png, image/jpg" multiple="multiple">
                      </div>
                      <div class="headMain">
                          <span class="file">上傳文件</span>
                          <p id="test-file-info" class="fileName"></p>
                     </div>
                  </form>
              </div>
              <div class="but">
                  <button class=" orangeHead" id="upImgSub"><a href="" title="編輯資料" target="_blank">保存</a></button>
              </div>
          </div>
    </body>
    
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.1.min.js"></script>
    <script type="text/javascript" >
        var fileInput = document.getElementById('test-image-file'),
            info = document.getElementById('test-file-info'),
            preview = document.getElementById('test-image-preview');
            dataBase64 = '',
        // preview.style.backgroundImage = 'url(../../img/portrait.png)';    //默認顯示的圖片

        // 監聽change事件:
        fileInput.addEventListener('change', upImg);

        // 頭像上傳邏輯函數
        function upImg(){
            preview.style.backgroundImage = '';       // 清除背景圖片
            if (!fileInput.value) {     // 檢查文件是否選擇:
                $('#test-image-preview').addClass('icon-bianjitouxiang');
                info.innerHTML = '沒有選擇文件';
            }else{
                $('#test-image-preview').removeClass('icon-bianjitouxiang');
                info.innerHTML = '';
            }
            
            var file = fileInput.files[0];    // 獲取File引用
            var size = file.size;
            if (size >= 1 * 1024 * 1024) {     //判斷文件大小
                info.innerHTML = '文件大於1兆不行!';
                preview.style.backgroundImage = '';
                $('#test-image-preview').addClass('icon-bianjitouxiang');
                return false;
            }
            
            if (file.type !== 'image/jpeg' && file.type !== 'image/png' && file.type !== 'image/gif') {    // 獲取File信息:
                info.innerHTML = '不是有效的圖片文件!';
                preview.style.backgroundImage = '';
                $('#test-image-preview').addClass('icon-bianjitouxiang');
                return;
            }

            // 讀取文件:
            var reader = new FileReader();
            reader.onload = function (e) {
                dataBase64 = e.target.result;      
                preview.style.backgroundImage = 'url(' + dataBase64 + ') ';
                preview.style.backgroundRepeat = 'no-repeat';
                preview.style.backgroundSize = ' 100% 100%';
            };
            // 以DataURL的形式讀取文件:
            reader.readAsDataURL(file);
            // console.log(file);
        }
        //提交圖片,將圖片的 base64 編碼提交到服務器
        $("#upImgSub").click(function () {
            $.ajax({
                type:'post',
                data:{'newHead':dataBase64},
                async:false,     //  是否異步請求
                dataType:'json',
                url:'/index/img',
                success:function (res) {    // 返回成功
                    if(res.code === 200){
                        alert(msg)          // 上傳成功
                    }else{
                        alert(msg)          // 上傳失敗
                    }
                },
                error:function () {
                    alert("接口錯誤");       // 返回失敗
                }
            })
        });
    </script>
</html>

 


免責聲明!

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



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