アプリ版:「スタンプのみでお礼する」機能のリリースについて

<input type="file">でcsvのみを送信できるようにするために、jQueryでtypeチェックしているのですが、csvのMIMEがPC(ブラウザ)環境によっていろいろあるみたいですが調べても出てこないのでお教えください。

html ------------------------------

<input type="file" accept=".csv" onChange="checkFile();">

----------------------------------

javascript -------------------------

function checkFiles(){
 var files = $('input').prop('files');
 for (file in files){
  console.log(files[file].type);
 }
}

----------------------------------

これを実行すると、環境によってfiles[file].typeが以下の4種類あることがわかりました。

text/csv
text/comma-separated-values
application/csv
application/force-download

最初はここまでcsvの種類があるのが知らずに上から2つまでチェックしていたのですが、他の環境だと上記の4つまで出てきました。
もしかしたらさらに多くの種類があるのでは・・・?と思ってしまいますが、そもそも送信するのにcsvかどうかチェックするのにMIMEではダメなのでしょうか?

ちなみにcsvファイルはExcelで出力したり、テキストエディタなどで作ったファイルです。
送信する人が作るのでどのアプリで作ってくださいと指定はできません。

どうぞよろしくお願い致します。

A 回答 (1件)

クライアント側のMIME-typesはUA設定依存なのでマイナーなフォーマットになるとあまりあてになりません。


MIME Sniffingを読む限りではbinaryのMIME-types判定に重きを置いているようです。
http://www.hcn.zaq.ne.jp/___/WEB/File_API-ja.htm …
https://mimesniff.spec.whatwg.org/

正しいファイル名が付与されているという性善説に立つなら、簡易的には「拡張子」が適切だと思います。
ただし、拡張子だけでは不十分なので、最終的にはサーバサイドでファイル内の文字列をパースしてCSVフォーマットであることを確定させる必要があります。
サーバサイドの負荷を減らすためにJavaScriptでパースすると更に良いと思います。

# Re: suffreさん
    • good
    • 0
この回答へのお礼

ありがとうございます!
なかなか情報がなかったので助かりました!

一応サーバー側でもチェックしているのでjavascriptでのチェックはやめることにしました。
MIMEについて調べるだけでも時間かかってしまっていますし、なんか不毛な感じがしてきたので…。

お礼日時:2014/10/13 15:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!