• ベストアンサー

contenttypeについて

ブラウザにてmultipart/form-dataを使用してファイルアップロード処理をサーバ側で行っているのですが、csvファイル(拡張子csv)はcontenttypeがapplication/octet-streamとなります。 これをtext/plainとしたい場合どうすればよいのでしょうか?そもそも何を持ってcontenttypeって判定されているのでしょうか? ※もちろん、対象ファイルの拡張子をtxtに変えればtext/plainにはなりますが・・・

  • sting
  • お礼率12% (35/274)
  • HTML
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.3

>クライアントの設定によるということなのでしょうか? アップロード時のcontent-typeはサーバにpostする時にブラウザがpostデータに入れてくるのでPC側での設定です。 アップロードならpostデータの中にローカルのファイル名も一緒に送られてきますから、そこから拡張子を抜き出して判定してはどうでしょうか?(macで拡張子が付いてない場合はどうすればいいかわかりませんが) サーバで実行する言語に合わせた場所で質問すればperlならモジュールとか、なんか便利な方法がわかるかも。

sting
質問者

お礼

やっぱりクライアント側に依存しているんですね~。 csvファイルってExcelインストール有無でtext/plain、application/octet-streamになってしまうようなので、やはりファイル名の拡張子で判断するしかないですかね~(根本解決ではないですが・・・)

その他の回答 (2)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

質問通りPC(ローカルファイル)→サーバ時の話なら、 それはOS(ブラウザによっては独自のファイルを持ってる場合も?)の設定でWindowsならレジストリに設定されていて、拡張子との関連付けとかそのあたりで変更できたと思います。かなり自信ないですが。 CSVファイルのContent-typeがapplication/octet-streamでどういった問題が出ているかわかれば対策もあるかもしれませんね。

参考URL:
http://www.chichibu.ne.jp/~kawahira/data/reglist.htm
sting
質問者

補足

Content-typeはサーバ側が判定するものではなく、クライアントの設定によるということなのでしょうか?こちらがcsvをtext/plainで判定したいのは、application/octet-streamだと他の拡張子exeとかも許容するような仕組みになってしまうのを避けたいのです・・・。 でもクライアントの設定によってcontent-typeが決定してしまうというのであればどうしようもないですね・・・。 No.1さんのようにサーバ側で強制的にできないのかなぁ・・・。

  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.1

ファイルのダウンロードの話でしょうか? Apacheであれば、.htaccessの設定で変えられます(設定にもよりますが) cvsのあるフォルダに.htaccessを作って中身を、 AddType text/plain .cvs とします。 参考 http://scrum.fuzoku.u-toyama.ac.jp/manual/mod/mod_mime.html http://www.shtml.jp/htaccess/mime.html

関連するQ&A

  • テキストファイルのアップロードについて

    HTMLよりアップロード対象のテキストファイル(csv)パスが指定された場合、送られてくるcontent-typeがoctet-streamとなりますが正しいのでしょうか?何だかバイナリデータ扱いとなってしまい格納データがバイトコードになってしまいます・・・。multipart/form-dataでPOSTしているだけなのですが・・・

  • CSVのMIMEタイプ

    PHPを使用してCSVの入力チェックを行おうとしています。 エクセルファイルの内容をcsv形式で保存していますが、EXCEL2003で保存したcsvはtext/plainとしてMIMEタイプが認識されますが、EXCEL2007で保存するとMIMEタイプがapplication/octet-streamとして認識されてしまいます。 1.エクセルファイルをエクスプローラー等から名前の変更で拡張子ごと無理矢理csvに変更することが想定されています。 その場合は当然入力チェックではじきたいのですがMIMEタイプでtext/plain text/csv以外はじくということが出来なくて困っています。 何かPHP側でCSVかどうかを確認する方法はありますでしょうか? (エクセルファイル以外にもテキスト形式ではない場合はエラーとしたいです。) 1行取り出して、指定カラム分あるかのチェックは別にしていますが、上述の通り、EXCELを無理に直したのか、純粋に中のデータの列定義がおかしいのかは分けてエラーを表示したいと考えています。 2.1が難しいという場合エクセル側でMIMETYPEを変更することはできないでしょうか? 現在は名前を付けて保存で、拡張子をcsvを選択して保存しています。 (2007以降でバージョンは様々あります。)

    • 締切済み
    • PHP
  • formでファイルアップロードとテキストデータを送信したい

    JSPとServletでプログラムを作っております。 フォームで次のことをしたいと思っております。 1、DBにファイルをアップロードする。 2、DBにテキストデータを登録する。 この場合、 <form enctype = "multipart/form-data"> <form enctype = "text/plain"> を別個に指定できるのでしょうか? 出来ないとしたらどういう解決方法があるのでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • HTML
  • PHP→DB→CSV 「ダウンロードできません」

    DBの内容をPHPを使ってCSVに変換してダウンロードするプログラムを使っています。 プログラム(csv.php)の先頭に header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=output.txt"); header ("Content-Description: File Transfer"); を書いているのですが、いざダウンロードをする画面になるとoutput.csvでなくcsv.phpをダウンロードすることになってしまいダウンロードができません。 表示だけならばっちりでているのですが、、、ファイルタイプがHTMLとなっているのも意味不明です。 だれか助けてください(><

    • ベストアンサー
    • PHP
  • PHPからファイルアップロードの実現

    ブラウザからファイルをアップロードするように、PHP内で同じことを実現させたいと考えています。 fsockopenを使用してGETやPOSTをすることは実現できていますが、ファイルのアップロードとなると少々勝手が違い、うまいことできません。 現状では下記のようなものを送信させているのですが、受け取り側のPHPで認識できません。 POST /upload.php HTTP/1.0 host: 127.0.0.1 Content-Type: multipart/form-data; boundary=---test Connection: close Content-Length: 120 ---test Content-Disposition: form-data; name="test"; filename="test.txt" Content-Type: text/plain testtest ---test 現状、テスト用に upload.php というので受け取っているのですが、$_FILES 変数は空の状態です。 基本的なところを理解していないので、根本的に間違っていたり、足りないところがあるような気がするのですが…。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでのファイルダウンロードについて

    初めて質問させていただきます。 社内用でファイルのアップロード・ダウンロードができるシステムを開発しています。 PCからは問題なくアップロードもダウンロードも行えていたのですが、 スマホからアクセスしてダウンロードをすると失敗してしまいます。 下記のコードを使ってます。 ファイルの種類はいろいろなので、「application/octet-stream」にしてます。 が、それぞれのファイルタイプに合わせて変更させても状況は変わりませんでした。 -- header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.$file_name.'"'); header('Content-Length: '.filesize($dl_file)); readfile($dl_file); exit; -- なにか解決策があるようでしたら、教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpでcsvダウンロードできない

    phpで配列をCSV にしてボタンを押すとブラウザからダウンロードさせたいのですが、 htmlタグで表示した後に、ボタンを押すとブラウザからダウンロードさせるには、以下の ヘッダーをhtmlタグより下につけると、機能しなくなってダウンロードできなくなって しまっています。 どうしたらいいのでしょうか。 header('Content-Type:application/octet-stream'); header('Content-Disposition:attachment;filename=data.csv');

    • ベストアンサー
    • PHP
  • ダウンロードダイアログなしでローカル端末にダウンロードするには

    ASPにおいてDBよりデータを抽出し、CSVファイル形式としてローカル端末の指定ディレクトリにダウンロードしたいのですが、ご教授お願いします。本当に困っています!!! ここで問題になるのが 1.ダウンロードダイアログを表示せずにローカル端末の固定のディレクトリにダウンロードしたいということ。 2.ダウンロードするファイルは1度に2,3ファイルあるということです。 ちなみに Response.AddHeader "Content-Disposition","filename=[ファイル名]" Response.ContentType = "application/octet-stream-dummy" ではファイル名指定しかできませんし、一度に2,3ファイルをダウンロードすることもできまん。これから発展させることはできるのでしょうか??違う方法でもいいのでいい案があったらご教授ください!!! よろしくおねがいします!!!!!

  • 添付ファイルが開けません

    メールの添付ファイルが開けません! ファイルの種類 application/octet-stream ファイル名 .rpt です。 送信者には、今夜は聞けません。 よろしくお願いします。

  • Powerpoint形式を判別できません

    現在、PHPにてファイルアップロードの機能を実装しています。 PowerPoint形式のファイルをアップロードさせるために、 PowerPoint形式以外のファイルをアップロード禁止制限を掛けようと考えています。 下記のような分岐処理をしても、2003形式の .ppt 形式のファイル、 2007形式の .pptx 形式のファイルを判別する事ができません。 2003、2007それぞれのMIME設定で、これらのファイル形式を判別するにはどうすればよろしいでしょうか? # PowerPoint2003形式のファイルではないか? if( $imgFileType != "application/vnd.ms-powerpoint" ) {  # PowerPoint2007形式のファイルではないか?  if( $imgFileType != "application/vnd.openxmlformats-officedocument.presentationml.presentation" ) {   (エラーメッセージ『アップロードできないファイル形式です。』を表示)  } } によりファイル形式を判別させているのですが、 予期した通りに動作せず、どちらのファイル形式をアップロードしても 『アップロードできないファイル形式です。』のエラーとなってしまいます。 MIMEタイプの変数 $imgFileType の値が、  PowerPoint2003形式のファイル(拡張子 .ppt)をアップロードした場合、"application/octet-stream"  PowerPoint2007形式のファイル(拡張子 .pptx)をアップロードした場合、"application/x-zip-compressed" として格納されてしまいます。 アップロード先は、ロリポップのレンタルサーバで PHPのバージョン = 5.2.17 となっています。 ご教授いただければ幸いです。

    • 締切済み
    • PHP

専門家に質問してみよう