2010-06-03 27 views
14

được cung cấp đường dẫn của tệp như:
C: \ file.jpg
Tôi có thể lấy kích thước tệp bằng javascript như thế nào?nhận kích thước tệp trong javascript

+0

http://code.google.com/p/gwtupload/ kiểm tra điều này.Họ bằng cách nào đó quản lý để hiển thị thanh tiến trình tải lên – Andrey

+1

Bạn có máy chủ web có thể truy cập vào 'C:' không? Nếu hệ điều hành của bạn là trên 'C:', tôi khuyên bạn nên chống lại điều đó, nhưng trước tiên. – vol7ron

Trả lời

25

Nếu nó không phải là một ứng dụng địa phương được hỗ trợ bằng JavaScript có quyền truy cập đầy đủ, bạn không thể lấy kích thước của bất kỳ tệp nào chỉ từ tên đường dẫn. Các trang web chạy javascript không có quyền truy cập vào hệ thống tệp cục bộ vì lý do bảo mật.

Bạn có thể sử dụng trình tải lên tệp có độ phân giải cao cấp như SWFUpload nếu bạn muốn hiển thị thanh tiến trình. HTML5 cũng có File API, nhưng chưa được hỗ trợ rộng rãi. Nếu người dùng chọn các tập tin cho một yếu tố input[type=file], bạn có thể nhận được thông tin chi tiết về các tập tin từ bộ sưu tập files:

alert(myInp.files[0].size); 
+0

tôi nghĩ như vậy, nhưng làm thế nào một số ứng dụng web thông minh hiển thị thanh tiến trình trong khi tải lên? – Andrey

+0

@Andrey: Các ứng dụng web khác sử dụng Java hoặc Flash. Tôi đã cập nhật câu trả lời của mình bằng một liên kết đến [SWFUpload] phổ biến (http://www.swfupload.org/). –

+0

@Andrey Các công cụ tập lệnh khác như Flash, ActiveX, v.v. có thể truy cập vào hệ thống tệp cục bộ. Ngoài ra, một số kỹ thuật phía máy chủ có thể được sử dụng để theo dõi quá trình tải lên tệp và cung cấp thông tin đó khi javascript yêu cầu –

0

Bạn không thể lấy kích thước tệp của tệp cục bộ bằng javascript theo cách thông thường bằng trình duyệt web.

Nhưng nếu tập tin có thể truy cập từ một con đường từ xa, bạn có thể có thể gửi một yêu cầu HEAD sử dụng Javascript, và đọc header Content-length, tùy thuộc vào máy chủ web

+0

tôi nghĩ như vậy, nhưng làm thế nào một số ứng dụng web thông minh hiển thị thanh tiến trình trong khi tải lên? – Andrey

+0

@Andrey sử dụng flash hoặc mô-đun php có thể đếm byte hoặc tương tự. – baloo

+0

flash là tốt, nhưng PHP? – Andrey

0

Bạn có thể không phải là không có tập tin đầu vào/đầu ra trong Javascript. Xem here cho một câu hỏi tương tự được đăng.

0

Bạn không thể.

JavaScript không thể truy cập tệp trên máy tính cục bộ vì lý do bảo mật, thậm chí để kiểm tra kích thước của chúng.

Điều duy nhất bạn có thể làm là sử dụng JavaScript để gửi biểu mẫu với trường file tới tập lệnh phía máy chủ, sau đó có thể đo kích thước của nó và trả lại.

9
function findSize() { 
    var fileInput = document.getElementById("fUpload"); 
    try{ 
     alert(fileInput.files[0].size); // Size returned in bytes. 
    }catch(e){ 
     var objFSO = new ActiveXObject("Scripting.FileSystemObject"); 
     var e = objFSO.getFile(fileInput.value); 
     var fileSize = e.size; 
     alert(fileSize);  
    } 
} 
+3

bạn có thể thêm một lời giải thích? – CraigTeegarden

+0

Ồ, tôi đoán là bắt nếu đối với các trình duyệt không hỗ trợ cách HTML5 – GabrielBB

0

Để có được kích thước tập tin của các trang trên web tôi đã xây dựng một bookmarklet javascript để thực hiện lừa. Nó cảnh báo kích thước trong kb's. Thay đổi cảnh báo thành lời nhắc nếu bạn muốn sao chép các tập tin.

Đây là mã bookmarklet cho cảnh báo.

<a href="javascript:a=document.getElementsByTagName('HTML')[0].outerHTML;b=a.length/1024;c=Math.round(b);alert(c+' kb');">Doc Size</a> 

Đây là mã bookmarklet cho lời nhắc.

<a href="javascript:a=document.getElementsByTagName('HTML')[0].outerHTML;b=a.length/1024;c=Math.round(b);prompt('Page Size',c+' kb');">Doc Size</a> 

Nhìn thấy nó trong hành động ở http://bookmarklets.to.g0.to/filesize.php

0

Hãy thử thế này.

function showFileSize() { 
 
    let file = document.getElementById("file").files[0]; 
 
    if(file) { 
 
    alert(file.size + " in bytes"); 
 
    } else { 
 
    alert("select a file... duh"); 
 
    } 
 
}
<input type="file" id="file"/> 
 
<button onclick="showFileSize()">show file size</button>

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