程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> html5 如何實現客戶端驗證上傳文件的大小,

html5 如何實現客戶端驗證上傳文件的大小,

編輯:關於PHP編程

html5 如何實現客戶端驗證上傳文件的大小,


在HTML 5中,現在可以在客戶端進行文件上傳時的校驗了,比如用戶選擇文件後,可以 馬上校驗文件的大小和屬性等。本文章向碼農介紹html5 如何實現客戶端驗證上傳文件的大小,感興趣的碼農可以參考一下。

在HTML 5中,現在可以在客戶端進行文件上傳時的校驗了,比如用戶選擇文件後,可以馬上校驗文件的大小和屬性等,這其實時得益於浏覽器端新增的對文件的校驗能力,其中支持HTML 5的浏覽器,都會實現W3C實現的文件API標准,其中可以讀取客戶端文件的各種信息和參數。 

下面的例子如下,首先是HTML 

<input type="file" data-file_type="zip|png" data-max_size="1000000"> 

這裡data-file_type屬性中,指定了文件的類型,接受ZIP,PNG文件,用|分隔開來,其中data-max-size指定文件的大小,這裡是1MB。然後使用jquery 進行判斷 

$('input[type=file]').each(function()  
{  
    if(typeof $(this).attr('data-file_type') == 'string')  
    {  
        var file_types = $(this).attr('data-file_type').split('|');  
    }  
        
    var mimes = get_mimes(file_types);  
  
         //文件要求的指定大小  
    var max_size = parseInt($(this).attr('data-max_size'));  
  
    $(this).change(function(evt)  
    {  
        var finput = $(this);  
  
        var files = evt.target.files; // 獲得文件對象  
  
                var output = [];  
  
        for (var i = 0, f; f = files[i]; i++)  
        {  
            //檢查文件的類型是否符合指定要求  
            if(jQuery.inArray(f.type , mimes) == -1)  
            {  
                alert('File type '+ f.type + ' not allowed');  
                $(this).val('');  
                continue;  
            }  
  
            //檢查文件大小  
            else if(f.size > max_size)  
            {  
                alert('Maximum file size is ' + max_size + ' bytes.');  
                $(this).val('');  
            }  
  
            //Validation ok  
            else  
            {  
                output.push('[b]', f.name, '[/b] (', f.type || 'n/a', ') - ', f.size, ' bytes, last modified: ', f.lastModifiedDate.toLocaleDateString() );  
            }  
        }  
  
        finput.after('<div>' + output.join('') + '</div>');  
    });  
});  

在上面的代碼中, var mimes = get_mimes(file_types); 其實是一個方法,如下: 

/* 
    Get the mimes of a list of extensions as an array 
*/  
function get_mimes(extensions)  
{  
    var mimes = [];  
    for(var i in extensions)  
    {  
        var ext = extensions[i];  
  
        if(ext in mime_types)  
        {  
            var mime = mime_types[ext];  
  
            if($.isArray(mime))  
            {  
                jQuery.merge(mimes , mime);  
            }  
            else  
            {  
                mimes.push(mime);  
            }  
        }  
    }  
  
    return mimes;  
}  

這裡其實就是將ZIP,PNG這樣的類型傳入,然後返回一個這類文件對應的MIME/TYPE,比如定義一個 mime_types數組,如下:

var mime_types = {  
"gif":"image\/gif", 
"jpeg":["image\/jpeg","image\/pjpeg"], 
"jpg":["image\/jpeg","image\/pjpeg"], 
"jpe":["image\/jpeg","image\/pjpeg"], 
"png":["image\/png","image\/x-png"], 
.................. 
} 

重點關注的是HTML 5中,新的文件API,可以在客戶端馬上判斷文件類型,如下: 

var files = evt.target.files; // 獲得文件對象,是一個集合,可以有多個文件 
var file_count = files.length;  //文件長度 

var file_1 = files[0]; // or files.item(0);這裡獲得多個文件中的第一個文件 

var name = file_1.name; //獲得文件名 
var size = file_1.size;//獲得文件大小 
var type = file_1.type; //文件類型 
var lastModifiedDate = file_1.lastModifiedDate;  //文件修改時間 

詳細的關於HTML 5文件上傳的,見: http://www.w3.org/TR/file-upload/

原文地址:http://www.manongjc.com/article/814.html

相關閱讀:

Resumable HTML5 File API 的文件上傳

html5解決大文件斷點續傳/上傳的方法

php結合html5 實現大文件上傳的方法

html5 分片/分塊/分割上傳超大文件

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved