2009-12-30 27 views
16

Làm cách nào để hạn chế loại tệp với loại tệp đầu vào HTML?Làm cách nào để hạn chế loại tệp có loại tệp nhập HTML?

Tôi có điều này

<input type="file" id="fileUpload" name="fileUpload" size="23" accept="Calendar/ics"/> 

Tôi cố gắng để hạn chế loại để chỉ các loại định dạng iCalendar.

Tôi cũng muốn kiểm tra ở phía máy chủ. Làm cách nào để thực hiện điều này trong ASP.NET MVC?

Trả lời

20

Thật không may, bạn không thể hạn chế phần mở rộng của tệp như bạn có thể trong hộp thoại trình duyệt tệp chuẩn. Tuy nhiên, bạn có thể kiểm tra tiện ích sau khi người dùng chọn tệp.

Bạn có thể thêm trình xử lý sự kiện này.

filebox.Attributes.Add("onchange", "fileSelectedChanged(this);"); 

và hàm JavaScript này

function fileSelectedChanged(obj) { 
    var filePath = obj.value; 

    var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase(); 
    if(ext != 'csv') { 
     alert('Only files with the file extension CSV are allowed'); 
    } else { 
     document.getElementById('form1').submit(); 
    } 
} 

Bạn cũng nên kiểm tra xem nó trên máy chủ, sử dụng:

filebox.PostedFile.FileName 

và:

filebox.PostedFile.ContentType 
+0

bạn có nghĩa là khi họ tải tệp lên máy chủ hoặc khi họ nhấp vào tệp trong "hộp thoại chọn tệp"? – chobo2

+0

Điều này được thực hiện bằng JavaScript khi người dùng chọn một tệp mới (Tôi đã bao gồm một chức năng cho bạn) –

+0

Hãy nhớ chấp nhận câu trả lời này nếu nó giúp giải quyết vấn đề của bạn. –

3

text/lịch là đúng loại mime

<input type="file" id="fileUpload" name="fileUpload" size="23" accept="text/calendar" /> 
+4

Trình duyệt hiện tại thường bỏ qua thuộc tính ACCEPT –

+0

Tuyệt vời, không biết về thuộc tính accept. Vẫn cần phải được xác nhận hợp lệ phía máy chủ, nhưng có thể giúp giảm mức sử dụng tài nguyên trên máy chủ vì các tệp không truy cập máy chủ không cần phải được kiểm tra. –

+0

như Gabriel cho biết thuộc tính này thường được các trình duyệt chính nhập vào để bạn phải sử dụng javascript để "xác thực trước". – Flatlin3

0

Bạn không thể chỉ định loại tệp mà người dùng có thể chọn. Bạn có thể sử dụng Javascript để ngăn người dùng gửi biểu mẫu, nhưng điều đó không đủ tốt. Javascript có thể dễ dàng bị vô hiệu hóa trong trình duyệt. Bạn cần logic trên server-side mà đánh giá content-type đã được upload xong (thậm chí chỉ cần kiểm tra phần mở rộng tập tin là thực sự không đủ tốt) ...

HttpPostedFile file = Request.Files(0); 

if(file.ContentType != "text/calendar") 
{ 
    //Error 
} 
0

instaed của chấp nhận bạn nên sử dụng thuộc tính contetypes nhận thấy rằng có đơn "t" trong contentypes

và trong máy chủ kiểm tra mã như thế này

HttpPostedFileBase file = Request.Files [0];

if (! File.ContentType.startsWith ("text/lịch")) { // Lỗi }

hy vọng điều này sẽ sove vấn đề của bạn Đánh dấu câu trả lời của tôi nếu nó sẽ.

0

Cá nhân tôi thích thứ gì đó như Uploadify cho phép bạn thực hiện việc này và cũng cung cấp thanh tiến trình ưa thích ... Tôi không biết liệu đó có phải là "trọng lượng nặng" hay không.

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