HTML Girişi = “dosya” Öznitelik Dosya Türünü Kabul Et (CSV)


501

Sayfamda bir dosya yükleme nesnesi var:

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

masaüstümde aşağıdaki excel dosyaları ile:

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

Dosya yüklemeyi istiyorum SADECE göstermek.xlsx,.xls&.csvdosyaları.

Kullanmak accept özelliği bu içerik türlerinin .xlsx& .xlsuzantıları ile ilgilendiğini gördüm ...

accept= application / vnd.openxmlformats-officedocument.spreadsheetml.sheet (.XLSX)

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

Ancak, bir Excel CSV dosyası için doğru içerik türünü bulamıyorum! Herhangi bir öneri?

ÖRNEK: http://jsfiddle.net/LzLcZ/


tarayıcıların çoğu, hassas dosyaları iletmeye dikkat etmeyen kullanıcıları şifrelemek için kullanılabileceğinden, kabul özelliğine saygı göstermez.
tletnes

9
@tletnes doğru değil, çoğu büyük tarayıcı tarafından destekleniyor
Dom

Bunu ($ .trim ($ ('# OriginalFileName'). Val ())! = "") {Var ext = $ ('# OriginalFileName'). Val (). Split ('.') .pop () toLowerCase (.); if ($ .inArray (ext, ['doc', 'docx', 'pdf', 'xlsx', 'xls']) == -1) {$ ('# OriginalFileNameValid'). html ('.doc kullanın , .docx, .pdf dosyaları '); }}
Nithin Paul

Diğer herhangi bir Ubuntu kullanıcısı bununla karıştırılırsa, Ubuntu'da Firefox'un varsayılan olarak "Tüm Dosyalar" 'ı göstermesini buldum, ancak dosya seçimi iletişim kutusundaki dosya türü iletişim kutusuna "kabul et" özelliğiniz ne olursa olsun ekler.
mltsy

Yanıtlar:


1247

Bu utanç verici ... Aradığım çözümü buldum ve daha kolay olamazdı. İstenilen sonucu almak için aşağıdaki kodu kullandım. Umarım bu gelecekte birine yardımcı olur. Yardımlarınız için herkese teşekkürler.

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

Geçerli Kabul Türleri:

For CSV dosyaları (CSV), kullanım:

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

İçin Excel Files 97-2003 (.xls), kullanım:

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

İçin Excel dosyaları 2007+ (.xlsx), kullanım:

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

İçin Metin Dosyaları (.txt) kullanımı:

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

İçin Resim Dosyaları (.png / .jpg / vs), kullanım:

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

For HTML dosyaları (.htm, .html), kullanım:

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

İçin Video Dosyaları (.avi, .mpg, .mpeg, .mp4), kullanım:

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

İçin Ses Dosyaları (.mp3, .wav, vb), kullanım:

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

İçin PDF Dosyası , kullanım:

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

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


NOT:

Excel CSV dosyalarını ( .csv) görüntülemeye çalışıyorsanız , KULLANMAYIN :

  • text/csv
  • application/csv
  • text/comma-separated-values( yalnızca Opera'da çalışır ).

Bir görüntülemek çalışıyorsanız özellikle dosya türünü (örneğin, bir WAVya da PDF), o zaman bu neredeyse daima işi ...

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

3
Görünüşe göre Chrome bu özelliği destekliyor, ancak Firefox hala üzerinde çalışıyor. Bu hatayı daha hızlı çözecek şekilde oylayabilirsiniz: bugzilla.mozilla.org/show_bug.cgi?id=826176
Salvatorelab

3
Accept niteliği sadece dosya türlerine filtre uygular. Kullanıcıların diğer dosya türlerini seçmesini önlemek için dosya doğrulamayı da kullanmanız gerekir. Umarım yardımcı olur!
Dom

1
<input type = "file" accept = ". csv" /> Firefox'ta çalışmıyor. Firefox'ta bu işi yapmak için başka bir çözüm var mı?
Ganesa Vijayakumar

1
<input type="file" accept=".csv, text/csv" />Mac'te firefox, chrome ve opera'da çalıştı. yalnızca .csv tüm tarayıcılarda çalışmadı.
tmas

1
"Xml" dosyasına bir örnek ekleyebilir misiniz? Yararlı olacak. Şimdiden teşekkürler.
ni8mr


38

Dom bu özellik çok eski ve bildiğim kadarıyla modern tarayıcılarda kabul edilmiyor, Ama burada bir alternatif var, Bunu dene

<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);" />

Sanırım size yardımcı olacak elbette bu betiği ihtiyaçlarınıza göre değiştirebilirsiniz.


5
Serin bir çözüm ama böyle bir özniteliğin neden 'eski' olarak kabul edildiğini anlamıyorum. Bu, neredeyse her işletim sisteminde temel bir dosya seçici özelliğidir, tarayıcılar çalışmasını sağlamak için ellerinden geleni yapmalıdır ve birçok kullanıcıya yardımcı olacaktır ...
Christophe Roussy

1
Accept özelliği eski değildir ve IE / Edge dışındaki ana tarayıcılarda desteklenir: caniuse.com/#feat=input-file-accept . Lütfen cevabınızı yanlış yönlendirdiği için yeniden ifade edin.
thomaux

2
Özelliğin en önemli yanı accept, açık dosya iletişim kutusuna sağladığı ipucudur. Kullanıcıya varsayılan olarak eşleşen dosyalar sunulmalıdır, muhtemelen istedikleri takdirde diğer türleri seçme seçeneği ile sunulmalıdır - çoğu modern tarayıcı şu anda bu şekilde davranmaktadır.
Coderer

13

Kabul text/comma-separated-valuesözniteliğinde CSV mime tipi için kullandım ve Opera'da iyi çalışıyor. Şanssız denedim text/csv.

Önerilen çalışmazsa CSV için bazı MIME Türleri:

  • metin / virgülle ayrılmış değer
  • metin / csv
  • Uygulama / CSV
  • Uygulama / Excel
  • Uygulama / vnd.ms-Excel
  • Uygulama / vnd.msexcel
  • metin / anytext

Kaynak: http://filext.com/file-extension/CSV


1
Merhaba Dom! Üzgünüm demek istiyorum çünkü cevabınız (doğru olarak işaretlenmiş) TAMAM ve sadece Opera'da siteyi test ediyordum çünkü daha önce çok fazla ilgi görmüyorum. Diğer tarayıcılarda test ettikten sonra, yanıtınızın daha eksiksiz olduğunu görüyorum. Ancak tüm tarayıcılarda çalışmaz. Firefox 17, Dosya İletişim Kutusu'ndaki ( bugzilla.mozilla.org/show_bug.cgi?id=83749#c14 ) bir filtrenin nasıl kabul edildiğini kabul etmeyi desteklemez , bu nedenle bu özellik benim için şüphelidir. Yine de javascript dosya doğrulamasını kullanacağım, ancak kabul attr'de
jaysponsored

11

Safari 10 altında bu benim için işe yaramadı:

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

Bunun yerine yazmak zorunda kaldım:

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

Hii ,, benim safari de iyi çalışıyor. Ama excel belgelerini kabul etmek istersek? ipucun var mı @trojan
gustav

Big Money'nin cevabını kontrol edin. TLDR; <input type = "file" ID = "fileSeç" kabul = ". xlsx, .xls, .csv" />
Sk. Irfan

4

Yalnızca aşağıdakileri yaparak herhangi bir dosya için doğru içerik türünü öğrenebilirsiniz:

1) İlgilenilen dosyayı seçin,

2) Ve bu konsolda çalıştırın:

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

Ayrıca, bir kerede birden fazla dosya için içerik türünü kontrol etmek ve daha sonra yapmak üzere girişinizin "çoklu" özelliğini ayarlayabilirsiniz.

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

Öznitelik kabulünün birden çok öznitelikle ilgili bazı sorunları vardır ve bu durumda düzgün çalışmaz.


1

@Yogi'nin çözümünü değiştirdim. Buna ek olarak, dosya yanlış biçime sahip olduğunda girdi öğesi değerini sıfırlarım.

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;
}

Ben özel doğrulama buildin var, çünkü açık dosya penceresinde kullanıcı hala giriş öğesinde kabul özniteliğini açıkça ayarlamak, ne olursa olsun "Tüm dosyalar ('*')" seçenekleri seçebilirsiniz.


0

Artık yeni html5 giriş doğrulama özelliğini kullanabilirsiniz pattern=".+\.(xlsx|xls|csv)".


10
Göre MDN'yi , This attribute applies when the value of the type attribute is text, search, tel, url or email; otherwise it is ignored.dosya girişi ile ilgili olarak, onlar söyleyecek devamfile: 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.