• ベストアンサー

Ajaxでファイル中身をPOSTするには

Ajaxを使用してファイルをPOSTしようと思っています。 jQuery+AJAX Uploadを使ってのPOSTはできました。 ですが、受け手側(API)の仕様により、ファイルをPOSTするのではなく、 ファイルの内容をデータとして転送する必要があり困っています。 イメージとしては、multipart、--boundary--を使わないで input type="text" value="エンコードしたファイルの内容" でPOSTする感じのことをやりたいです。 JavaScriptでPOSTするファイルの内容を参照する方法 ご存知でしたら教えて下さい。 参考) AJAX Upload:http://valums.com/projects/ajax-upload/

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

  • ベストアンサー
回答No.2

> JavaScriptでPOSTするファイルの内容を参照する方法 > ご存知でしたら教えて下さい。 この方法はありませんが、 <input type="file">を使用していても、multipart/form-dataを使わなくても送信は可能です。 ファイルの中に&の文字が入っていると、そこでフォームフィールドの区切りと見なされますので、ファイルが分割されるかもしれません。 たとえば <input type="text" name="a" value="あいうえお"> <input type="text" name="b" value="かきくけこ"> これを送信すると a=あいうえお&b=かきくけこ というデータが送られます。 multipart/form-dataを使わずに、 <input type="file" name="a"> を使用して、 あいうえお&b=かきくけこ と書いたファイルを送信すると、 a=あいうえお&b=かきくけこ というデータが送られることになりますので、 「&b=かきくけこ」という部分は、aのファイルの一部なのか、 aのファイルとは別に<input type="text" name="b" value="かきくけこ">というフィールドから送られてきたものなのか、区別が付かなくなります。 それを区別できるようにするものがmultipart/form-dataです。 言い換えれば、 ファイルの中に&や=の文字がないこと、および、バイナリデータではないことを保証できるなら、 または、サーバー側で、a=以外の&や=の区切りを無視する設定にしてあれば、 multipart/form-dataを使わなくても正常に送信することは可能です。

dede_nd
質問者

補足

なるほど。そういった方法もあるのですね。勉強になります。 残念なことに今回はバイナリデータなので、分割された場合に順番がわからなくなりファイルが壊れるだろうと思われるので、諦めて代替処置で補うことにします。 また別の機会で必要になりましたら、是非試してみようと思います。 ありがとうございました。

その他の回答 (1)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

JavaScriptはローカルなファイルにアクセスできない仕様なので無理です。 Windows IE 環境ならVbscript、Jscriptで可能かもしれません。 あるいは、人が対象ファイルを開いてtextareaに貼り付けするしかないですね、もっともバイナリーファイルなら事前に別途クライアント側でエンコードする必要がありますね。 それともPROXYとなる自分のCGIプログラムを作ってそこから変換してPOSTさせるとか

dede_nd
質問者

補足

やはり無理ですか…。 Ajaxで送信する際に、転送するファイル(データ)へアクセスできるかと思ったのですが、残念です。 CGIを使って1クッション置く方法はダメだった場合に考えているのですが 転送するファイルの容量が大きく、CGIのサーバ側でリミットを変更する必要があり、できれば…と思っています。 ありがとうございました。

関連するQ&A