🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

2652閲覧

ファイルのmine-typeが、ターミナルとjavascriptで異なっていても正しいかどうか答えて欲しい

kureyonyon

総合スコア13

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/03/15 03:02

ファイルのMIMEタイプに関して質問です。
現在、ファイルのMINE-typeを取得して、CSVファイル以外を弾くという処理を実装しています。
javascriptでファイルのMINE-typeをCSVで取得でき、適切にCSV以外を弾くことができております。
ただ、ターミナル上で、fileのMINEタイプを調べると異なったMINEタイプが表示されてしまいますが、.htmlや.cssなどのファイルは弾くことができているのですが、ターミナルでのファイルのMINEタイプとjavascriptのMINEタイプでは差異が出るのでしょうか?

例 exampel.csv で調べると。

コマンド

file --mime example.csv →text/plain; charset=unknown-8bit

javascript

console.log(e.target.files[0].type); →'text/csv'

CSV形式かどうか判定しているコード

javascript

1let file = e.target.files[0]; 2let message = '' 3if (!file.type.match('text/csv')) { 4 message = 'ファイルの形式が違います。' 5 return 6}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

この辺りが参考になるのではないでしょうか。

現在の実装に基づけば、ブラウザーは実際にファイルのバイトストリームを読み取ってメディアタイプを判断している訳ではありません。ファイルの拡張子に基づいて推測します。 PNG 画像ファイルを .txt に改名すると "text/plain" となり、"image/png" とはなりません。さらに file.type は一般的に、画像、 HTML 文書、音声、動画などの一般的なファイルタイプに対してのみ信頼できます。一般的ではないファイルの拡張子に対しては、空の文字列を返します。クライアントの構成 (Windows レジストリなど) によっては、一般的なタイプの場合でも予期しない値が発生することがあります。開発者は、このプロパティを唯一の検証方法として信頼しないことをお勧めします

File.type - Web API | MDN

投稿2021/03/15 03:35

Lhankor_Mhy

総合スコア36928

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「カンマの入るテキストファイル」のMIME Typeとしては、text/plaintext/csvのどちらもありうる値です。

「テキストを書いていて、その合間にコンマがあるtext/plainな文書」なのか「カンマ区切りをベースとするtext/csvのCSVデータなのか」は、意味を捉えなければ区別できませんので、(ファイル名など中身以外のメタデータとして事前に定義しておくのでなければ)中身だけから機械的に判断することは困難です。

text/*かどうかだけチェックして、あとは中身を検証する、というスタンスで行くのがいいかと思います。

投稿2021/03/15 03:30

編集2021/03/15 03:31
maisumakun

総合スコア145965

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/03/15 03:40

なお、ブラウザサイドのチェックは、(その後サーバに送信する状況では)ユーザー補助程度の意味合いとなります。 攻撃者はHTMLを加工する、HTMLと無関係にPOSTを送りつけるなどでJavaScriptを回避することが可能ですので、セキュリティ的な期待はすべきではありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問