2011-04-18 30 views
30

Bir kullanıcının yükleyebileceği bir dosyanın boyutunu sınırlamak isterim. Dosya yükleme boyutunu sınırlandır (html girişi)

Ben maxlength = 20000 = 20k düşündüm ama o hiç işe görünmüyor.

Rails değil PHP üzerinde çalıştırıyorum, ancak HTML/CSS içinde bunu istemci tarafında yapmak çok daha basittir olurdu düşünerek veya son çare olarak jQuery kullanıyordu. Bu kadar basit, ancak eksik veya farkında olmayan bir HTML etiketi olmalı. IE7 +, Chrome, FF3.6 + desteklemeye Looking

. Gerekirse IE8 + 'i destekleyerek uzaklaşabilirim.

Teşekkürler.

+1

Bu mümkündür. Lütfen [bu] adresine bakın (http://stackoverflow.com/questions/3717793/javascript-file-upload-size-validation). – sandSK

cevap

17

İstemci tarafı yapamazsınız. Bunu sunucuda yapmanız gerekecek.

Düzenleme: Bu cevap modası geçmiş! Bu düzenlemenin bazı Zamanla

, HTML dosyası API mostly supported on all major browsers olduğunu.

Ben çözümü içeren bir güncelleme sağlar, ancak already did it mark.inman.winning @ ederim.

istemcide doğrulamak için artık mümkün olsa bile, yine de olsa, sunucu üzerinde doğrulamak gerektiğini unutmayın. Tüm istemci tarafı doğrulamaları atlanabilir.

+2

İstemci tarafı yapmanın imkansız olduğunu mu söylüyorsun? Müşteri tarafında zarif bir çözüm olmalı ... "İmkansız" kelimesini sevmiyorum :) – delphi

+2

Evet, şu anda imkansız. HTML5'te yeni bir dosya api taslakları var, ancak şu anda hiçbir tarayıcı tam olarak desteklenmiyor. – Andre

+2

Bkz: http://www.cs.tut.fi/~jkorpela/forms/file.html, "Dosya boyutunda kısıtlamalar belirleme", neden istemci tarafında yapmaya çalıştığınız anlamsızdır. – magma

57

Bu tamamen mümkündür. Javascript kullan.

Giriş öğesini seçmek için jQuery kullanıyorum. Bir değişiklik olayı ile kurdum.

$("#aFile_upload").on("change", function (e) { 

    var count=1; 
    var files = e.currentTarget.files; // puts all files into an array 

    // call them as such; files[0].size will get you the file size of the 0th file 
    for (var x in files) { 

     var filesize = ((files[x].size/1024)/1024).toFixed(4); // MB 

     if (files[x].name != "item" && typeof files[x].name != "undefined" && filesize <= 10) { 

      if (count > 1) { 

       approvedHTML += ", "+files[x].name; 
      } 
      else { 

       approvedHTML += files[x].name; 
      } 

      count++; 
     } 
    } 
    $("#approvedFiles").val(approvedHTML); 

}); 

Yukarıdaki kod olur aslında göndermeden önce ben, gönderme sayfasına devam eden layık gördükleri tüm dosya adlarını kaydeder. "Onaylı" dosyaları jQuery kullanarak bir giriş öğesinin valsına ekledim, böylece bir form gönderimi kaydetmek istediğim dosyaların isimlerini gönderir. Ancak tüm dosyalar gönderilecek, ancak şimdi sunucu tarafında bunları filtrelemek zorundayız. Bunun için henüz bir kod yazmamıştım, ama hayal gücünü kullan. Bunu bir for döngüsüyle başarabilir ve giriş alanından gönderilen isimleri eşleştirebilir ve $ _FILES (PHP Superglobal, kusurlu ruby ​​dosyası değişkenini bilmiyorum) değişkeniyle eşleştirebilirim.

Öncelikle, göndermeden önce dosya denetimleri yapabilirsiniz. Bunu yaptıktan sonra, sitemi ne yüklediklerini bilmelerini sağlamak için formu göndermeden önce kullanıcıya gönderirim. Ölçütleri karşılamayan herhangi bir şey kullanıcıya geri gösterilmez ve bu nedenle, çok büyük dosyaların kaydedilmeyeceğini bilmeleri gerekir. Bu, tüm tarayıcılarda çalışmalıdır, çünkü FormData nesnesini kullanmıyorum.

+0

İlginç. Bu çözümle ilgili sorunlar neler? – delphi

+10

İstemci tarafında yapamazsınız ve her zaman çalışmasını beklersiniz. Sunucu tarafında da önemli bir kontrol varsa, başka kişiler büyük dosyaları yüklemek için formun değiştirilmiş kopyalarını (veya diğer istemci taraf araçlarını) kullanacaktır. Sunucu tarafı denetimleri bir kilit gibidir, istemci tarafı denetimleri "dışarıda kal" yazan bir not gibidir. Önce kapıyı kilitleyin ve sonra "dışarıda" işaretini kaldırın. – user340140

+1

@ user340140 İstemci javascript'i destekledikçe yapabilirsiniz. İstemci yalnızca sitenin javascript'in etkin olmasını gerektirdiğini belirtmezse. Javascript aslında tricked olamaz bir dosya okuyucu vardır, biraz bit okur bu yüzden gizlice başka bir boyutta küçük bir dosya alma endişesi yoktur. Sunucu tarafı tercih edilen "güvenli" yöntemidir, ancak dosya boyutu hakkında konuşurken javascript'in ne kadar güvenli olmadığını göremiyorum. –

İlgili konular