在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 分片/分塊/分割上傳超大文件