2011-09-02 36 views
11

Có thể sử dụng Javascript để kiểm tra kích thước của tệp (ở phía máy khách) trước khi tệp thực sự được tải lên máy chủ không?Javascript để kiểm tra tệp trước khi tải lên trong Internet Explorer

Ứng dụng được xây dựng trên EXTJS và Java và bị hạn chế sử dụng bởi Internet Explorere 7 trên máy Windows XP. Không cho phép sử dụng activeX.

Quy trình làm việc như sau: Người dùng chọn tệp để tải lên. Xác nhận đá ngay lập tức để kiểm tra loại tệp và kích hoạt. Nếu các tập tin vượt quá giới hạn, GUI sẽ nhắc nhở với lỗi. Nếu tệp được đặt trong giới hạn, tệp đầy đủ sẽ được chuyển đến cuối máy chủ (java servlet) sẽ được tải lên.

Kiểm tra kích thước tệp và đọc đường dẫn tệp đầy đủ có thể đạt được bằng javascript không?

Trả lời

0

Lý do bạn không thể là vì sẽ rất tệ nếu trình duyệt và javascript có thể truy cập hệ thống tệp của khách hàng.

Điều này đang bị từ chối và có thể được xem là tấn công.

Using jQuery, Restricting File Size Before Uploading

+0

Làm thế nào về phương pháp khác. Nói rằng tôi có một hình thức đầu vào, tìm tập tin đầy đủ đầu tiên và sau đó ăn nó vào mã kiểm tra kích thước tập tin. Tôi đã xem xét uploadify, swfupload, fancifulupload và yuiuploader. Tôi dường như không thể "ăn" đủ filepath vào chúng. – user924590

3

Hiện không có cách để kiểm tra portably kích thước của một tập tin được tải lên từ trình duyệt web. Các HTML5 File API làm cho điều này có thể, nhưng đó là không có sẵn trong MSIE7 - nó hiện đang trên đường đua cho MSIE10.

Có cố ý không có cách nào để xác định đường dẫn đầy đủ của tệp được tải lên, vì có thể bao gồm thông tin nhạy cảm, như tên của người dùng cuối.

+0

Tôi đang tìm nạp trước tệp. Ví dụ khi tôi đã chọn tập tin và sau đó PRIOR để tải lên thực tế để có được các filesize và filepath đầy đủ. – user924590

+1

Như tôi đã lưu ý, hiện tại không có cách nào để phát hiện kích thước tệp và có (và sẽ không bao giờ có) cách nào để xác định đường dẫn cục bộ. – duskwuff

4

Có thể với ActiveX Objects.

<html> 
<head> 
<script> 
function getSize() 
{ 
    var myFSO = new ActiveXObject("Scripting.FileSystemObject"); 
    var filepath = document.upload.file.value; 
    var thefile = myFSO.getFile(filepath); 
    var size = thefile.size; 
    alert(size + " bytes"); 
} 
</script> 
</head> 
<body> 
<form name="upload"> 
<input type="file" name="file"> 
<input type="button" value="Size?" onClick="getSize();"> 
</form> 
</body> 
</html> 
+0

Cảm ơn bạn đã nhập mã. Như tôi đã đề cập trong bài viết đầu tiên của tôi, không đi theo cách ActiveX. :) – user924590

-3

Vui lòng thử bên dưới mã,

<html> 
<head> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.js"></script> 
<script type="text/javascript"> 
$(function() { 
$("document").ready(function(){ 
     $("#myFile1").change(function() { 

     var f1=document.getElementById("myFile1").value; 
     if((f.size||f.fileSize)==09765625) 
     { 
     alert("file size is less than 1mb"); 
     } 
     else 
     { 
     alert("file size should not exceed more than 1mb"); 
       $(this).val($.data(this, 'f')); 
     return false; 
     } 

      }); 
}); 
}) 
</script> 
</head> 
<body> 

<input type='file' name="file" id="myFile1" /> 

</body> 
</html> 
+0

Mã này gây hiểu lầm – nicoabie

Các vấn đề liên quan