2013-12-13 42 views
1

我有一個窗體,它具有名字,姓氏等控件,還有文件上傳附件。我需要計算所有數據應該達到2.5 MB以上。如何驗證表單控件數據大小不超過2.5 mb?

我們如何使用jQuery做到這一點,並在該頁面上顯示驗證錯誤?

<form action="/ContactSubmission" class="form-horizontal" enctype="multipart/form-data" method="post" role="form" novalidate="novalidate">     
    <div class="col-sm-7"> 
      <input class="form-control input-validation-error" data-val="true" data-val-required="The First Name field is required." id="FirstName" name="FirstName" placeholder="First Name" required="required" type="text" value=""> 
      <span class="field-validation-error" data-valmsg-for="FirstName" data-valmsg-replace="true" style="color:Red"><span for="FirstName" class="">The First Name field is required.</span> 
    </div> 
    <div class="col-sm-7"> 
      <input class="form-control" data-val="true" data-val-required="The Last Name field is required." id="LastName" name="LastName" placeholder="Last Name" type="text" value=""> 
      <span class="field-validation-valid" data-valmsg-for="LastName" data-valmsg-replace="true" style="color:Red"></span> 
    </div> 
    <div class="col-sm-7"> 
      <input class="form-control" data-val="true" data-val-required="The Email Address field is required." id="EmailAddress" name="EmailAddress" placeholder="Email Address" type="text" value=""> 
      <span class="field-validation-valid" data-valmsg-for="EmailAddress" data-valmsg-replace="true" style="color:Red"></span> 
     </div> 
     <div class="col-sm-7"> 
      <input class="form-control" id="Attachement" name="Attachement" type="file" value=""> 
     </div> 
     <div class="form-group"> 
      <div class="col-sm-4 col-md-offset-5"> 
       <button type="submit" class="btn btn-primary">Submit</button> 
       <button type="button" class="btn btn-default" id="cancel">Cancel</button> 
      </div> 
     </div> 

+0

等一下,你的數據必須是至少2.5MB或最大2.5MB ? – RononDex

+0

檢查這個答案,也許這是同一個問題:http://stackoverflow.com/a/11799218/2547435 – p2kmgcl

+0

最大2.5MB ...用戶不應該提交更多。 – James123

回答

2

隨着現代瀏覽器(該瀏覽器支持HTML5),你可以檢查<input type="file">元素的文件的size財產。

var input = $('input[type="file"]')[0]; 
var fileSize = input.files[0].size // file size in bytes 

在舊的瀏覽器(不支持HTML5的瀏覽器),你不能做到這一點使用jQuery因爲jQuery(JavaScript的)不具有訪問您通過<input type="file">提交文件的大小。你有兩個備選方案:

  1. 使用Flash上​​傳(swfupload爲例)。 Flash 確實有訪問文件的大小,與JavaScript相反。

  2. 讓用戶上傳文件(即使它太大)(使用您現有的form),檢查後端的文件大小,然後向他顯示一條消息,指出文件已被丟棄,因爲它太大。

第一個解決方案(flash)的優點是不會讓用戶等待,直到超大文件的上傳完成。由於它可以訪問文件大小,因此您可以在上傳開始之前顯示錯誤。

+0

現代瀏覽器可以獲取文件大小:http://stackoverflow.com/a/4307882(另請參閱:http://www.html5rocks.com/en/tutorials/file/dndfiles/) –

+0

感謝您的評論,我更新了我的回答 –

+0

閃存在iPad和許多類型的智能手機上都不支持(它只消耗很多電量) – davidkonrad

1

您可以檢查文件輸入的files - 屬性是這樣的:

<input type="file" name="photo" id="photo"> 

腳本:

var photo=document.getElementById('photo'); 
photo.onchange = function() { 
    var file = photo.files[0]; 
    if (file.size>2621440) { 
     alert('Filesize must 2.5mb or below'); 
    } 
} 
+0

請記住,這隻適用於「現代」瀏覽器。 –

+0

是的!但是所有支持html5的瀏覽器都應該支持它 - > https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications。不要以爲我有任何報告,它沒有在特定的瀏覽器工作(但沒有這麼多的用戶) - 會說,如果你的瀏覽器支持'multiple =「multiple」'那麼它也會支持文件對象。 – davidkonrad

+1

它在IE9中無法使用:-P –