2009-02-13 32 views
6

Tôi có thẻ nhập tệp trong ứng dụng web của mình. Tôi muốn kiểm tra xem tệp có quá lớn trước khi gửi tệp đến máy chủ hay không. Tất nhiên, tôi vẫn có phía máy chủ xác thực. Có cách nào để làm điều này với JavaScript? Nó phải hoạt động trong IE7 + và FF3 +. Cảm ơn bạn.Cách lấy kích thước của một tệp trước khi tải lên?

EDIT: somefileinputobject.files [0] .filesize hoạt động trong FF, nhưng không phải IE.

+0

Thật không may, đây là một cái gì đó chưa phải là nền tảng mà không cần sử dụng plugin (ví dụ: flash). http://www.w3.org/TR/FileAPI/ là các thông số kỹ thuật đang được Firefox hỗ trợ. – Matthew

+0

Nhân bản: http://stackoverflow.com/questions/158149/how-do-you-restrict-the-size-of-a-file-being-uploaded-with-javascript-or-java-w –

+0

Xem [this câu hỏi và câu trả lời mới hơn.] (http://stackoverflow.com/questions/3717793/javascript-file-upload-size-validation) Trong các trình duyệt hiện đại, điều này có thể không có yêu cầu tới máy chủ, mặc dù việc xác thực phải được thực hiện trên máy chủ cũng vậy. – Pointy

Trả lời

2

Đó là một vấn đề khó khăn. Bạn phải làm điều đó với AJAX và sử dụng các tiêu đề được kích hoạt gửi bởi trình duyệt tới máy chủ theo yêu cầu POST.

Thư viện giao diện người dùng của Yahoo có công cụ trợ giúp việc này. YUI Uploader

+0

Giải pháp này sẽ làm việc cho tôi nếu tôi có thể kiểm tra các tiêu đề tập tin bằng cách sử dụng jQuery/Javascript trước khi trình Ajax. Điều này có thể, và nếu như vậy làm thế nào? Cảm ơn. – TonE

+0

Tôi e là không. Tôi nghĩ rằng Flash có khả năng cho điều đó. Nếu bạn có thể đủ khả năng chi phí hiệu suất của một yêu cầu máy chủ khứ hồi, tôi sẽ có kịch bản của bạn lưu trữ thông tin từ các tiêu đề trên POST và sau đó có JQuery của bạn lấy chúng trong một cuộc gọi riêng biệt. Tôi tin rằng đó là cách công cụ YUI hoạt động. –

0

Javascript không thể thực hiện việc này. Nó sẽ có vấn đề an ninh nghiêm trọng. Có lẽ flash có thể mặc dù.

+1

JS có thể. Xem http://www.w3.org/TR/FileAPI/. Chỉ có FF 3.6 hỗ trợ nó bây giờ (theo như tôi biết). Nó không phải là không an toàn, theo nghĩa là người dùng phải chọn tệp. Tuy nhiên, nó kém an toàn hơn, theo nghĩa là chúng không còn phải nhấn nút gửi nữa. – Matthew

+0

Nếu có bất cứ điều gì, tuyên bố này là bản cáo trạng của Flash. –

+0

Tôi thậm chí không biết làm thế nào tôi có ở đây nhưng .. ngày hôm nay .. nó có thể trong tất cả các trình duyệt chính, D – GottZ

0

Câu trả lời ngắn gọn: Không, bạn nên xử lý điều này trên máy chủ.

Câu trả lời dài: Không đáng tin cậy. Với IE bạn có thể làm một cái gì đó như:

function checkSize(filespec) { 
var fso, f, s; 
fso = new ActiveXObject("Scripting.FileSystemObject"); 
f = fso.GetFile(filespec); 
s = f.size; 
// Do something with var s 
} 

Nhưng điều này có thể dễ dàng được comprimised bởi thiết lập bảo mật của trình duyệt hoặc sử dụng một trình duyệt khác hay nền tảng.

0

có thể không được tin cậy thực hiện với Javascript cho tất cả các trình duyệt, nhưng bạn có thể giới hạn tổng kích thước của dữ liệu gửi từ web.config

0

Bạn thực sự không có nhiều tùy chọn nếu bạn đang sử dụng điều khiển nhập tệp truyền thống. Bạn không thể kiểm tra nó ở phía máy khách và nó sẽ nhấn maxRequestLength được cấu hình của bạn trước khi bạn có cơ hội kiểm tra phía máy chủ. Bạn có thể bắt ngoại lệ xảy ra khi maxRequestLength được vượt quá mặc dù.

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