Nhập liệu HTML = Tập tin khác chấp nhận Loại tệp thuộc tính (CSV)


501

Tôi có một đối tượng tải lên tập tin trên trang của mình:

<input type="file" ID="fileSelect" />

với các tệp excel sau trên máy tính để bàn của tôi:

  1. file1.xlsx
  2. file1.xls
  3. file.csv

Tôi muốn tải lên tập tin để chỉ hiển thị .xlsx, .xls, & .csvfile.

Sử dụng acceptthuộc tính, tôi thấy các loại nội dung này đã chăm sóc .xlsx& .xlstiện ích mở rộng ...

accept= application / vnd.openxmlformats-offratedocument.s Lansheetml.sheet (.XLSX)

accept= application / vnd.ms-excel (.XLS)

Tuy nhiên, tôi không thể tìm thấy loại nội dung chính xác cho tệp CSV Excel! Bất kỳ đề xuất?

VÍ DỤ: http://jsfiddle.net/LzLcZ/


hầu hết các trình duyệt không tôn trọng thuộc tính chấp nhận vì nó có thể được sử dụng để mã hóa người dùng không chú ý truyền các tệp nhạy cảm.
tletnes

9
@tletnes không đúng, nó được hỗ trợ bởi hầu hết các trình duyệt chính
Dom

Bạn cũng có thể thử điều này nếu ($ .trim ($ ('# OriginalFileName'). Val ())! = "") {Var ext = $ ('# OriginalFileName'). Val (). Split ('.') .pop (). toLowerCase (); if ($ .inArray (ext, ['doc', 'docx', 'pdf', 'xlsx', 'xls']) == -1) {$ ('# OriginalFileNameValid'). html ('Sử dụng .doc , tệp .docx, .pdf '); }}
Nithin Paul

Trong trường hợp bất kỳ người dùng Ubuntu nào khác bị nhầm lẫn bởi điều này, tôi đã thấy rằng trong Ubuntu, Firefox mặc định hiển thị "Tất cả tệp", nhưng thêm bất cứ thuộc tính "chấp nhận" nào của bạn vào danh sách thả xuống tệp trong hộp thoại chọn tệp.
mltsy

Câu trả lời:


1248

Chà, điều này thật đáng xấu hổ ... Tôi đã tìm ra giải pháp mà tôi đang tìm kiếm và nó không thể đơn giản hơn. Tôi đã sử dụng mã sau đây để có được kết quả mong muốn. Mong rằng điều này sẽ giúp ai đó trong tương lai. Cảm ơn mọi người đã giúp đỡ.

<input id="fileSelect" type="file" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" />  

Các loại chấp nhận hợp lệ:

Đối với tệp CSV (.csv), hãy sử dụng:

<input type="file" accept=".csv" />

Đối với Tệp Excel 97-2003 (.xls), hãy sử dụng:

<input type="file" accept="application/vnd.ms-excel" />

Đối với Tệp Excel 2007+ (.xlsx), hãy sử dụng:

<input type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />

Đối với tệp văn bản (.txt) sử dụng:

<input type="file" accept="text/plain" />

Đối với Tệp hình ảnh (.png / .jpg / etc), hãy sử dụng:

<input type="file" accept="image/*" />

Đối với Tệp HTML (.htm, .html), hãy sử dụng:

<input type="file" accept="text/html" />

Đối với Tệp video (.avi, .mpg, .mpeg, .mp4), hãy sử dụng:

<input type="file" accept="video/*" />

Đối với Tệp âm thanh (.mp3, .wav, v.v.), hãy sử dụng:

<input type="file" accept="audio/*" />

Đối với tệp PDF , sử dụng:

<input type="file" accept=".pdf" /> 

DEMO:
http://jsfiddle.net/dundredd77/LzLcZ/144/


GHI CHÚ:

Nếu bạn đang cố hiển thị các tệp CSV Excel ( .csv), KHÔNG sử dụng:

  • text/csv
  • application/csv
  • text/comma-separated-values(chỉ hoạt động trong Opera ).

Nếu bạn đang cố gắng hiển thị một loại tệp cụ thể (ví dụ: a WAVhoặc PDF), thì điều này hầu như sẽ luôn hoạt động ...

 <input type="file" accept=".FILETYPE" />

3
Có vẻ như Chrome hỗ trợ thuộc tính này, nhưng Firefox vẫn đang làm việc với nó. Bạn có thể bình chọn lỗi này để họ sẽ giải quyết nhanh hơn: bugzilla.mozilla.org/show_orms.cgi?id=826176
Salvatorelab

3
@DavidRouten thuộc tính accept sẽ chỉ lọc các loại tệp. Bạn cũng sẽ phải sử dụng xác thực tệp để ngăn người dùng chọn các loại tệp khác. Mong rằng sẽ giúp!
Dom

1
<input type = "file" accept = ". csv" /> không hoạt động trong Firefox. Có giải pháp nào khác để thực hiện công việc này trong Firefox không.
Ganesa Vijayakumar

1
<input type="file" accept=".csv, text/csv" />làm việc cho tôi trong firefox, chrome và opera trên mac. chỉ .csv không hoạt động trong tất cả các trình duyệt.
tmas

1
Bạn có thể thêm một ví dụ cho tập tin "xml" không? Nó sẽ hữu ích. Cảm ơn trước.
ni8mr

161

Ngày nay, bạn chỉ có thể sử dụng phần mở rộng tập tin

<input type="file" ID="fileSelect" accept=".xlsx, .xls, .csv"/>

3
Mặc dù đáng kinh ngạc là điều này (và giải pháp thay thế application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel) vẫn không xuất hiện để hoạt động trên Edge 41.16299.820.0 stackoverflow.com/questions/31875617/ trên wpdev.uservoice.com/forums/257854-microsoft-edge-developer/ tựa
SharpC

38

Theo tôi biết, thuộc tính này rất cũ và không được chấp nhận trong các trình duyệt hiện đại theo như tôi biết, nhưng đây là một thay thế cho nó, Hãy thử điều này

<script type="text/javascript" language="javascript">
function checkfile(sender) {
    var validExts = new Array(".xlsx", ".xls", ".csv");
    var fileExt = sender.value;
    fileExt = fileExt.substring(fileExt.lastIndexOf('.'));
    if (validExts.indexOf(fileExt) < 0) {
      alert("Invalid file selected, valid files are of " +
               validExts.toString() + " types.");
      return false;
    }
    else return true;
}
</script>

<input type="file" id="file" onchange="checkfile(this);" />

Tôi đoán nó sẽ giúp bạn tất nhiên bạn có thể thay đổi tập lệnh này theo nhu cầu của bạn.


5
Cách giải quyết tuyệt vời nhưng tôi không hiểu tại sao một thuộc tính như vậy được coi là 'cũ'. Đây là một tính năng chọn tệp cơ bản trên gần như mọi hệ điều hành, các trình duyệt nên cố gắng hết sức để làm cho nó hoạt động và nó sẽ giúp nhiều người dùng ...
Barshe Roussy

1
Thuộc tính accept không cũ và được hỗ trợ trong các trình duyệt chính trừ IE / Edge: caniuse.com/#feat=input-file-accept . Vui lòng viết lại câu trả lời của bạn vì nó là sai.
thomaux

2
Khía cạnh quan trọng nhất của acceptthuộc tính là gợi ý mà nó cung cấp cho hộp thoại tệp mở. Người dùng nên được trình bày với các tệp phù hợp theo mặc định, có lẽ là với một tùy chọn để chọn các loại khác nếu họ muốn - đây là cách hầu hết các trình duyệt hiện đại hoạt động.
Bộ giải mã

13

Tôi đã sử dụng text/comma-separated-valuescho loại mime CSV trong thuộc tính accept và nó hoạt động tốt trong Opera. Đã thử text/csvmà không gặp may.

Một số loại MIME khác cho CSV nếu đề xuất không hoạt động:

  • văn bản / dấu phẩy được phân tách-giá trị
  • văn bản / csv
  • ứng dụng / csv
  • ứng dụng / excel
  • ứng dụng / vnd.ms-excel
  • ứng dụng / vnd.msexcel
  • văn bản / anytext

Nguồn: http://filext.com/file-extension/CSV


1
Chào chị! Tôi muốn nói xin lỗi vì câu trả lời của bạn (được đánh dấu là đúng) là OK và tôi không có nhiều sự chú ý về nó trước đây vì tôi chỉ thử nghiệm trang web trong Opera. Sau khi thử nghiệm trong các trình duyệt khác, tôi thấy rằng câu trả lời của bạn đã đầy đủ hơn. Nhưng nó không hoạt động trong tất cả các trình duyệt. Firefox 17 không hỗ trợ chấp nhận attr như thế nào một bộ lọc trong Hộp thoại tệp ( bugzilla.mozilla.org/show_orms.cgi?id=83749#c14 ), vì vậy thuộc tính này rất đáng nghi đối với tôi. Dù sao tôi cũng sẽ sử dụng xác thực tệp javascript, nhưng sử dụng text / csv để chấp nhận attr vì đó là mặc định của IANA iana.org/assignments/media-types
jaysp tài trợ

11

Điều này không làm việc cho tôi trong Safari 10:

<input type="file" accept=".csv" />

Tôi đã phải viết điều này thay vào đó:

<input type="file" accept="text/csv" />

Hii ,,, nó cũng hoạt động tốt trên safari của tôi. Nhưng làm thế nào nếu chúng ta muốn chấp nhận tài liệu excel? Bạn có chút manh mối nào không ? @trojan
Gustav

Kiểm tra câu trả lời của Big Money. TLDR; <input type = "file" ID = "fileSelect" accept = ". xlsx, .xls, .csv" />
Sk. Irfan

4

Bạn có thể biết loại nội dung chính xác cho bất kỳ tệp nào bằng cách thực hiện như sau:

1) Chọn tập tin quan tâm,

2) Và chạy trong giao diện điều khiển này:

console.log($('.file-input')[0].files[0].type);

Bạn cũng có thể đặt thuộc tính "nhiều" cho đầu vào của mình để kiểm tra loại nội dung cho một số tệp cùng một lúc và thực hiện tiếp theo:

for (var i = 0; i < $('.file-input')[0].files.length; i++){
    console.log($('.file-input')[0].files[i].type);
}

Chấp nhận thuộc tính có một số vấn đề với nhiều thuộc tính và không hoạt động chính xác trong trường hợp này.


1

Tôi đã sửa đổi giải pháp của @yogi. Ngoài ra, khi tệp có định dạng không chính xác, tôi đặt lại giá trị phần tử đầu vào.

function checkFile(sender, validExts) {
    var fileExt = sender.value;
    fileExt = fileExt.substring(fileExt.lastIndexOf('.'));
    if (validExts.indexOf(fileExt) < 0 && fileExt != "") {
        alert("Invalid file selected, valid files are of " +
                 validExts.toString() + " types.");
        $(sender).val("");
        return false;
    }
    else return true;
}

Tôi có bản dựng xác minh tùy chỉnh, vì trong cửa sổ tệp mở, người dùng vẫn có thể chọn các tùy chọn "Tất cả tệp ('*')", bất kể tôi có đặt rõ ràng thuộc tính chấp nhận trong phần tử đầu vào hay không.


0

Bây giờ bạn có thể sử dụng thuộc tính xác thực đầu vào html5 mới pattern=".+\.(xlsx|xls|csv)".


10
Theo MDN , This attribute applies when the value of the type attribute is text, search, tel, url or email; otherwise it is ignored.Về tập tin đầu vào, họ đi vào để nóifile: A control that lets the user select a file. Use the accept attribute to define the types of files that the control can select.
Dom
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.