2009-10-16 34 views

回答

3

這不能在客戶端使用JavaScript來完成。也許你會發現一個用flash,silverlight或類似軟件編寫的文件上傳組件,允許通過類型,大小和尺寸來限制上傳的文件。

+1

+1 - 或者silverlight當然:) – 2009-10-16 11:02:32

0

你可以使用GD來檢查大小看this project一個ASP.net包裝

+0

在客戶端? – leppie 2009-10-16 10:56:20

+0

沒有服務器端(asp.net) – 2009-10-16 10:58:37

+0

-1 - 他特別說「上傳到服務器之前」 – 2009-10-16 11:03:08

0

你需要問問自己,你真的認爲這是可能的呢?

Javascript將會怎樣打開一個文件?它會如何讀取它?你有一個圖書館,可以閱讀任何數量的圖像格式?

2

你根本無法知道客戶端的JS文件大小。

什麼你可能做的是檢查的文件大小,一旦請求到達服務器上,然後取消轉移,如果預期的文件大小超過一定的限度:

在上載模塊的BeginRequest:

HttpWorkerRequest workerRequest = (HttpWorkerRequest)context.GetType().GetProperty("WorkerRequest", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(context, null); 
     // Indicates if the worker request has a body 

     if (workerRequest.HasEntityBody()) 
     { 
      // Get the byte size of the form post. 
      long contentLength = long.Parse((workerRequest.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentLength))); 
      if (contentLength > MAX_UPLOAD_FILE_SIZE * 1024) 
        { 
        workerRequest.CloseConnection(); 
        context.Response.Redirect(SomeErrorPage); 
        } 
     } 

沒有測試還沒有,但理論上它可能工作

編輯:沒關係,我是個白癡。我以爲他的意思是檢查文件大小,而不是圖像大小

1

我發現this Javascript snippet並在我的系統上工作(IE 7.0.6001.18000)。你應該知道並檢查可能的跨瀏覽器問題。

var tempImage; 

function showDimensions() { 
    var imageName = document.forms[0].elements['myFile'].value; 
    if (imageName != '') { 
     imageName = 'file:///' + escape(imageName.split('\\').join('/')); 
     imageName = imageName.split('%3A').join(':'); 

     tempImage = new Image(); 
     tempImage.onload = getDimensions; 
     tempImage.src = imageName + '?randParam=' + new Date().getTime(); 
     // append a timestamp to avoid caching issues - which happen if you 
     // overwrite any image with one of different dimensions, and try to 
     // get the dimensions again even with cache settings to max, 
     // in both ff and ie! 
    } 
} 

function getDimensions() { 
    alert(tempImage.width + ' x ' + tempImage.height); 
} 
+1

我不會爲無數的安全問題工作。同樣在IE7 +中,上傳文件元素的值將不再包含整個路徑。只需指定文件的名稱即可。 – Radu094 2009-10-16 11:32:46

+0

+1:我只是在這裏使用IE7運行此代碼並且工作;無論如何,它的好處是要警告這個可能的問題,ty – 2009-10-16 11:57:29

+0

奇怪的是,你可以在IE7中獲得完整的文件路徑。我清楚地記得不得不重寫我們的上傳組件,因爲這種行爲改變...也許一些未來的IE7更新恢復到舊的方式 – Radu094 2009-10-16 11:59:47

相關問題