• ベストアンサー

safari とmultipart/form-data

自作のCGIに対して、safariで動かすと正しく動作しないという苦情がきました。 (画像をアップできるようにしているため)multipart/form-data のフォームでデータを送信する形式をとっているのですが、報告してくれた方によるとWindowsのIEやNetscapeではちゃんと動作することを確認済みで、MacのNetscapeでも確認済みのようです。なのでsafariというブラウザに対応した記述をしていないからだとは思うのですが、私自身Macユーザーではないので自分で動作確認が出来ません^^;送信されるデータ形式が違うのでしょうか? 普通ならば -----------------------------7dxxxxxxxxxxxx Content-Disposition: form-data; name="test_A" aaaaa -----------------------------7dxxxxxxxxxxxx Content-Disposition: form-data; name="test_B" bbbbbb -----------------------------7dxxxxxxxxxxxx-- といった感じですよね?

  • arcsin
  • お礼率46% (194/417)
  • HTML
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • coriaka
  • ベストアンサー率72% (126/175)
回答No.2

これはsafariのバグです。 アップロードするファイル名やパスに日本語が含まれていると正しく送信できないようです。

参考URL:
http://jp.xoops.org/modules/newbb/viewtopic.php?topic_id=3404&forum=11

その他の回答 (1)

noname#161749
noname#161749
回答No.1

safariでの表示確認だけなら http://www.danvine.com/iecapture/ で目的のURL入れればキャプチャ画面を確認できます。

参考URL:
http://www.danvine.com/iecapture/

関連するQ&A

  • Ajax.Updaterでmultipart/form-dataの送信方法

    <html> <body> <form action="/hoge.cgi" method="POST" enctype="multipart/form-data" target="if"> arg1:<input type="textbox" name="arg1"/><br/> <input type="file" name="data" size="60"> <input type="submit" value="Upload" onclick="post()"/> </form> <iframe name="if" id="if" frameborder="0" border="0" width="730" height="500" scrolling="yes"></iframe> </body> </html> 上記と同じような事をiframeを使わないで実現したいです。 以下の様に書いてみました。 <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd'> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="prototype.js"></script> <script type="text/javascript"> function post(){ var url ='/hoge.cgi'; new Ajax.Updater( $('result'), url, { method: 'POST', parameters: Form.serialize($("form1")), contentType: 'multipart/form-data' } ); } </script> </head> <body> <form id="form1" enctype="multipart/form-data"> arg1:<input type="textbox" name="arg1"/><br/> <input type="file" name="data" size="60"> <input type="button" value="Upload" onclick="post()"/> </form> <div id="result"></div> </body> しかし、/hoge.cgiには前者と同じようなhttpリクエストがわたりません。前者と同じような(下記(1)参照)httpリクエストを発行するにはどうしたらよいでしょうか? (1)前者:httpリクエストの例 POST /hoge.cgi HTTP/1.1 CONTENT_LENGTH: 285 CONTENT_TYPE: multipart/form-data; boundary=---------------------------7d8ea171f055c ~中略~ -----------------------------7d8ea171f055c Content-Disposition: form-data; name="arg1" -----------------------------7d8ea171f055c Content-Disposition: form-data; name="data"; filename="" Content-Type: application/octet-stream -----------------------------7d8ea171f055c-- (2)後者:httpリクエストの例 POST /hoge.cgi HTTP/1.1 CONTENT_LENGTH: 11 CONTENT_TYPE: multipart/form-data; charset=UTF-8 ~中略~ arg1=&data=

  • multipart/form-data と $_FILE[ ]

    いつもお世話になってます。 multipart/form-dataにて、ファイルを受け取るとき、PHPでは、$_FILE変数に name="xxxx1"の名前が、$_FILE["xxxx1"]で取ることができます。 そこで、multipart/form-dataの filename="xxxxx.csv"という値は、 $_FILE["xxxx1"]["name"]に入ってくるのか、 それとも、 $_FILE["xxxx1"]["temp_name"]に入ってくるのかが、わかりません。 いろいろググッては見たのですが・・・。 どなたか、わかる方いらっしゃいますか?

    • ベストアンサー
    • PHP
  • multipart/form-dataを使ったデータ送信について

    色々調べましたが分からなかったので質問させてください。 ある配列データをmultipart/form-dataを使い送信したいと、 考えています 例) [sample1.php] $data = array("saitama","kanagawa","chiba"); //このsample1.phpファイルから$dataをmultipart/form-dataを使い、 //sample2.phpファイルに送信したいと考えています。 [sample2.php] //$dataを受け取る 調べましたがフォームを介して送信する方法はいくつかありましたが、 フォームを使わずに送信する方法がわかりませんでした。 どなかた教えていただけないでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • iis+cgiでmultipart/form-data送信がうまくいかない

    これまでLinux+Perl/CGIで構築していたWEBサーバをIIS+Perl/CGIに移す必要が生じ、新規にIISによるWEBサーバを構築しました。 一気にコンテンツを移動してもハマるだけだと考え、まずは簡単なコードを記述しCGIが動作するかどうかテストしています。 POSTによるinput type=textのデータ表示まではうまく行きましたが、ファイルアップロードのところで詰まりました。 IIS(Windows)によるWEBサーバの構築は初めてで、何が問題なのかサッパリわかりません。 どなたか問題点あるいはどこをチェックすれば良いかご指摘いただけませんでしょうか。 ●やった事 PerlにてPOSTを利用しmultipart/form-dataにてファイルをアップロードするシンプルなコードを書き、第一段階としてMIMEエンコードされたものをブラウザ上に表示するしようとしてみた。 コードは最下方の通り。 ●症状 送信を実行してもアップロード中のまま(ウィンドウマークが動き続けている)で、IISに設定してある10分程のタイムアウト時間を過ぎて終了してしまう。 TXT、XLS、DOCなどファイル種を変えて試しても全く同じ症状。 ●環境:Windows2000ServerSP4 IIS5.0 Perl5.8.8 *******アップロード画面****** <HTML> <HEAD> <TITILE>ファイルのアップロード</TITLE> </HEAD> <BODY> <FORM ACTION="/cgi-bin/upload.cgi" ENCTYPE="multipart/form-data" METHOD="POST"> ファイル: <INPUT TYPE="file" NAME="File" SIZE="32"><BR> <INPUT TYPE="submit" VALUE="送信"> </FORM> </BODY> </HTML> **********ここまで*********** *******CGI******************* #!/perl/bin/perl read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); print "Content-type: text/html\n"; print "\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>test</TITLE>\n"; print "</HEAD>\n"; print "<BODY BGCOLOR=\"#ffffff\">\n"; print "$buffer"; print "</BODY>\n"; print "</HTML>\n"; exit; ********ここまで***********************

    • ベストアンサー
    • CGI
  • cakephpでPOST(ajax)データを取得

    Cakephpからajaxでポストされたファイルデータをデータベースに保管したいのですが ポストの中身が取得できなくて困っています。自分なりに調査したのですが 結局パケットをキャプチャしてみても解決しないままです。 以下の二つにさほど違いはないように思えるのですが何が原因でしょうか? 必要な情報があれば補足いたします。 Cakephpの$this->request->dataからポストデータが正常に取得できるリクエスト POST /images/add HTTP/1.1 Host: yahoo.yahoo.yahoo User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ja,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Referer: http://yahoo.yahoo.yahoo/Administrators/makeTitleData Cookie: CAKEPHP=5d7cd855ad316267673b8a20e5fbcf9c Connection: keep-alive Content-Type: multipart/form-data; boundary=---------------------------199552540520686 Content-Length: 964 -----------------------------199552540520686 Content-Disposition: form-data; name="_method" POST -----------------------------199552540520686 Content-Disposition: form-data; name="data[Image][name]"; filename="" Content-Type: application/octet-stream -----------------------------199552540520686 Content-Disposition: form-data; name="image" -----------------------------199552540520686 Content-Disposition: form-data; name="data[Image][contents]" -----------------------------199552540520686 Content-Disposition: form-data; name="data[Image][moto_filename]" -----------------------------199552540520686 Content-Disposition: form-data; name="data[Image][filetype]" -----------------------------199552540520686 Content-Disposition: form-data; name="data[Image][filesize]" -----------------------------199552540520686 Content-Disposition: form-data; name="btnSave" ...... -----------------------------199552540520686-- Cakephpの$this ->request->dataでポストデータが取得できないリクエスト prの出力は空配列→array()(ajax+FormDataオブジェクトにて生成されたリクエスト) POST /Images/add HTTP/1.1 Host: yahoo.yahoo.yahoo User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0 Accept: */* Accept-Language: ja,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Content-Type: false X-Requested-With: XMLHttpRequest Referer: http://yahoo.yahoo.yahoo/Administrators/makeTitleData Content-Length: 572 Cookie: CAKEPHP=5d7cd855ad316267673b8a20e5fbcf9c Connection: keep-alive Pragma: no-cache Cache-Control: no-cache -----------------------------243202103330754 Content-Disposition: form-data; name="filename" a.txt -----------------------------243202103330754 Content-Disposition: form-data; name="contents" aaa -----------------------------243202103330754 Content-Disposition: form-data; name="moto_filename" b.txt -----------------------------243202103330754 Content-Disposition: form-data; name="filetype" image/jpg -----------------------------243202103330754 Content-Disposition: form-data; name="filesize" 10 -----------------------------243202103330754-- 何がいけないのでしょうか・・。 よろしくお願いいたします。ご回答お待ちしております。

    • 締切済み
    • PHP
  • FORM ACTIONでBCCを使いたいのですが・・・

    Form Action でBCCが正しく使えるようにするにはどうしたらいいのでしょうか?教えてください。 宜しくお願いします。 現状は以下です。 bccだけが届きません。 <form action="mailto:aaaaa@***.co.jp?bcc=bbbbbb@*******.co.jp" METHOD="post" name="mail" onSubmit="return former()">

  • 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
  • ファイルをアップロードするとファイルの中に・・・

    今、JAVAservletでファイルをアップロードするプログラムを作成しています。 であるサイトを参考に実装することには成功したのですが、予期せぬことに リクエスト内にある取り出す必要のない情報もいっしょにファイルに書き込まれて しまいます。FORMのボタンの情報が一番最後についてくるのです。 content-Type: multipart/form-data; boundary= ---------------------------10265533117308 -----------------------------10265533117308 content-disposition: form-data; name="submitter" username -----------------------------10265533117308 content-disposition: form-data; name="Uploaded file"; filename="abc" [... contents ...]  ← ココのみを取り出したい -----------------------------10265533117308 が、この場所にあるFORMボタンの名前などの情報も引っ付いてしまっている。 ------------------------------------------ どうやら、boundary 文字列 で区切られているという事は 調べたのですが、かといって「boundary」がなんなのかさっぱり わからず、切り離すにもどうしたらいいのかわからない状態なのです。  何か良い知恵を貸してください。 また、そういったことを詳しく乗せているサイトの情報などもお願いします。

    • ベストアンサー
    • Java
  • formの中で別のactionをもったsubmitボタンの設置。

    formの中で別のactionをもったsubmitボタンの設置。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>sample</title> <script language="JavaScript" type="text/javascript"> <!-- //<クリックした時に実行される関数> //*** 確認画面A function func1(form){ document.form1.check[].value =form.check[].value; document.form1.submit(); } //*** 確認画面B function func2(form){ document.form2.check[].value =form.check[].value; document.form2.submit(); } //--> </script> </head> <body class="index"> <form enctype="multipart/form-data"> <input type="check" name="test[]" value="0">0 <input type="check" name="test[]" value="1">1 <input type="check" name="test[]" value="2">2 <input type="button" onClick="func2(this.form)" value="確認B"> <input type="button" onClick="func1(this.form)" value="確認A"> </form> <!-- sousin.php画面へ --> <form method="post" name="form1" action="sousin.php" enctype="multipart/form-data"> <input type="hidden" name="check[]"> </form> <!--- text.php画面へ ---> <form method="post" name="form2" action="text.php" enctype="multipart/form-data"> <input type="hidden" name="check[]"> </form> </body> </html> 上記のように記述し、フォームの中に別のactionをもったsubmitボタンを設置しました。 チェックボックスで何と何がチェックされたかを渡したいのですが、エラーが発生します。 おそらくjavascript内の構文でcheck[]と記述してるからだと思いますが、 どのようにすれば受け渡すことができるのでしょうか。 checkのみにすると1つの値しか渡せません。

    • ベストアンサー
    • HTML
  • サーバーでのデコード方法(例えばbase64)

    質問内容 サーバーでのPHPスクリプトではアップロードされたファイルのデコードを行うにはContent-Transfer-Encoding: base64をみて 適切にデコード処理をするのだと考えますがContent-Transfer-Encoding: base64を取得する方法はどのようにすればいいか わからなくて困っています。 $_FILES,getallheaders(),file_get_contents('php://input')等を試しましたが必要な情報は得られませんでした。 知りたい内容は 1.ポストされたアップロードファイルのデコードはどのような判定方法になるか。 2.私は先にも記述しましたがContent-Transfer-Encoding: base64行を判定の基準とするものとと考えています、でもその内容の取得方法がわかりません。 3.および、これらの関連として生のデータ取得についても教えていただければ幸いです。($_POSTや$_FILESに加工される前の情報) 環境: SERVER_SOFTWARE : Apache/2.2.11 (Win32) mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.8 下記はHTTPプロトコルでサーバーに送られたデータストリームです。 (info1とinfo2は質問内容には直接関係はありません) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ POST /test/xxxx.php HTTP/1.0 Host: 192.168.xxx.uuu User-Agent: wxWidgets 2.x Content-Length: nnn Content-type: multipart/form-data; boundary=_--Boundary_separator --_--Boundary_separator Content-Disposition: form-data; name="info1" AAAAAAAAAAAAAAA --_--Boundary_separator Content-Disposition: form-data; name="info2" BBBBBBBBBBBBBBB --_--Boundary_separator Content-Disposition: form-data; name="file"; filename="anyfile.jpg" Content-Type: multipart/form-data Content-Transfer-Encoding: base64 base64でencodeされたデータ内容の羅列 --_--Boundary_separator-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 以上 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう