2009-03-16 31 views

Trả lời

254

Bạn có thể nhận được giá trị của trường tệp giống như bất kỳ trường nào khác. Tuy nhiên, bạn không thể thay đổi nó.

Vì vậy, để hời hợt kiểm tra nếu một tập tin có phần mở rộng đúng, bạn có thể làm một cái gì đó như thế này:

var ext = $('#my_file_field').val().split('.').pop().toLowerCase(); 
if($.inArray(ext, ['gif','png','jpg','jpeg']) == -1) { 
    alert('invalid extension!'); 
} 
+18

Và ràng buộc nó vào hình của bạn:. '$ ("# my_upload_form") bind ("submit", function() { // ở trên kiểm tra }); ' – 321X

+7

bạn có thể sử dụng '$ (' # file_field '). Change (function() {// above check}); ' – makki

+3

' $ ("# my_upload_form"). Bind ("submit", function() {// above check}); 'bây giờ sẽ bị ràng buộc bằng cách sử dụng' $ ("# my_upload_form"). Submit (function() {//above check}); 'http://api.jquery.com/submit/. bạn cũng có thể ngăn chặn biểu mẫu gửi bằng cách sử dụng '$ (" # my_upload_form "). submit (function (e) {// above check e.preventDefault();});' – Liam

26

Bạn có thể sử dụng các plugin xác nhận cho jQuery: http://docs.jquery.com/Plugins/Validation

Nó xảy ra với có quy tắc accept() thực hiện chính xác những gì bạn cần: http://docs.jquery.com/Plugins/Validation/Methods/accept#extension

Lưu ý rằng kiểm soát việc mở rộng tệp sion không phải là bằng chứng đạn vì nó không liên quan đến mimetype của tập tin. Vì vậy, bạn có thể có một .png đó là một tài liệu từ và một .doc đó là một hình ảnh png hoàn toàn hợp lệ. Vì vậy, đừng quên kiểm soát nhiều hơn phía máy chủ;)

+0

bạn có thể cung cấp ví dụ về cách sử dụng điều này với http://plugins.krajee.com/file-input#option-allowedfileextensions trên IE11 – shorif2000

35

Không cần plugin nào chỉ cho tác vụ này. Kết hợp điều này với nhau từ một vài tập lệnh khác:

$('INPUT[type="file"]').change(function() { 
    var ext = this.value.match(/\.(.+)$/)[1]; 
    switch (ext) { 
     case 'jpg': 
     case 'jpeg': 
     case 'png': 
     case 'gif': 
      $('#uploadButton').attr('disabled', false); 
      break; 
     default: 
      alert('This is not an allowed file type.'); 
      this.value = ''; 
    } 
}); 

Bí quyết ở đây là đặt nút tải lên thành tắt trừ khi và cho đến khi loại tệp hợp lệ được chọn.

+5

xin lỗi bro, nhưng đó là một regex xấu. các tệp được phép có dấu chấm trong tên của nó. "giel.asd.aaaaa.jpg.png" .match (/\.(.+)$/) –

19

Bạn không muốn kiểm tra trên MIME nhiều hơn bất kỳ phần mở rộng nào mà người dùng đang nói dối? Nếu vậy thì nó là ít hơn một dòng:

<input type="file" id="userfile" accept="image/*|video/*" required /> 
+5

Đẹp nhưng không được IE chấp nhận <10. – spadelives

+0

không nhận được những gì anh ta cần. nó chỉ là để xử lý dễ dàng hơn để chọn một hình ảnh từ một thư mục với phần mở rộng khác nhau. như bạn có thể thấy ở đây -> http://imageshack.us/a/img20/8451/switchzz.jpg – bernte

+0

Vì nó không làm hại IE <10, và không làm tổn thương mã khác, đó là một hạn chế hiệu quả đối với những gì bạn đang cố gắng hạn chế. – Leo

4

đối với trường hợp của tôi, tôi sử dụng các mã sau:

if (!(/\.(gif|jpg|jpeg|tiff|png)$/i).test(fileName)) {    
    alert('You must select an image file only');    
    } 
-1
function validateFileExtensions(){ 
     var validFileExtensions = ["jpg", "jpeg", "gif", "png"]; 
     var fileErrors = new Array(); 

     $("input:file").each(function(){ 
      var file = $(this).value; 
      var ext = file.split('.').pop(); 
      if($.inArray(ext, validFileExtensions) == -1) { 
       fileErrors.push(file); 
      } 
     }); 

     if(fileErrors.length > 0){ 
      var errorContainer = $("#validation-errors"); 
      for(var i=0; i < fileErrors.length; i++){ 
       errorContainer.append('<label for="title" class="error">* File:'+ file +' do not have a valid format!</label>'); 
      } 
      return false; 
     } 
     return true; 
    } 
0
<form enctype="multipart/form-data"> 
    <input name="file" type="file" /> 
    <input type="submit" value="Upload" /> 
</form> 
<script> 
$('input[type=file]').change(function(){ 
    var file = this.files[0]; 
    name = file.name; 
    size = file.size; 
    type = file.type; 
    //your validation 
}); 
</script> 
+0

Điều này không thể kiểm tra loại tập tin và kích thước, thử nghiệm trong FF. –

0

Nếu bạn đang làm việc với nhiều (html 5) tải lên tệp, tôi lấy nhận xét được đề xuất hàng đầu và sửa đổi nó một chút:

var files = $('#file1')[0].files; 
    var len = $('#file1').get(0).files.length; 

    for (var i = 0; i < len; i++) { 

     f = files[i]; 

     var ext = f.name.split('.').pop().toLowerCase(); 
     if ($.inArray(ext, ['gif', 'png', 'jpg', 'jpeg']) == -1) { 
      alert('invalid extension!'); 

     } 
    } 
18

Đối với giao diện người dùng, khá thuận tiện khi đặt thuộc tính 'chấp nhận' nếu bạn đang sử dụng trường tệp.

Ví dụ:

<input id="file" type="file" name="file" size="30" 
     accept="image/jpg,image/png,image/jpeg,image/gif" 
/> 

Một vài chú ý quan trọng:

+1

Vì vậy, tốt hơn nhiều so với việc sử dụng JQuery –

2

tôi cố gắng viết làm việc mã ví dụ, tôi thử nghiệm nó và làm tất cả mọi việc .

Hare là mã:

HTML:

<input type="file" class="attachment_input" name="file" onchange="checkFileSize(this, @Model.MaxSize.ToString(),@Html.Raw(Json.Encode(Model.FileExtensionsList)))" /> 

Javascript:

//function for check attachment size and extention match 
function checkFileSize(element, maxSize, extentionsArray) { 
    var val = $(element).val(); //get file value 

    var ext = val.substring(val.lastIndexOf('.') + 1).toLowerCase(); // get file extention 
    if ($.inArray(ext, extentionsArray) == -1) { 
     alert('false extension!'); 
    } 

    var fileSize = ($(element)[0].files[0].size/1024/1024); //size in MB 
    if (fileSize > maxSize) { 
     alert("Large file");// if Maxsize from Model > real file size alert this 
    } 
} 
-1

Đây là một mã đơn giản để xác nhận javascript, và sau đó xác nhận nó sẽ làm sạch tệp đầu vào.

<input type="file" id="image" accept="image/*" onChange="validate(this.value)"/> 

function validate(file) { 
    var ext = file.split("."); 
    ext = ext[ext.length-1].toLowerCase();  
    var arrayExtensions = ["jpg" , "jpeg", "png", "bmp", "gif"]; 

    if (arrayExtensions.lastIndexOf(ext) == -1) { 
     alert("Wrong extension type."); 
     $("#image").val(""); 
    } 
} 
1

Mã này hoạt động tốt, nhưng vấn đề duy nhất là nếu định dạng tệp khác với tùy chọn được chỉ định, nó hiển thị thông báo cảnh báo nhưng nó hiển thị tên tệp trong khi nó bị bỏ qua.

$('#ff2').change(
       function() { 
        var fileExtension = ['jpeg', 'jpg', 'pdf']; 
        if ($.inArray($(this).val().split('.').pop().toLowerCase(), fileExtension) == -1) { 
         alert("Only '.jpeg','.jpg','.pdf' formats are allowed."); 
         return false; } 
}); 
1

Ví dụ này chỉ cho phép tải lên hình ảnh PNG.

HTML

<input type="file" class="form-control" id="FileUpload1" accept="image/png" /> 

JS

$('#FileUpload1').change(
       function() { 
        var fileExtension = ['png']; 
        if ($.inArray($(this).val().split('.').pop().toLowerCase(), fileExtension) == -1) { 
         alert("Only '.png' format is allowed."); 
         this.value = ''; // Clean field 
         return false; 
        } 
       }); 
Các vấn đề liên quan