重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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/

A 回答 (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を使わなくても正常に送信することは可能です。

この回答への補足

なるほど。そういった方法もあるのですね。勉強になります。

残念なことに今回はバイナリデータなので、分割された場合に順番がわからなくなりファイルが壊れるだろうと思われるので、諦めて代替処置で補うことにします。

また別の機会で必要になりましたら、是非試してみようと思います。

ありがとうございました。

補足日時:2009/07/09 19:08
    • good
    • 0

JavaScriptはローカルなファイルにアクセスできない仕様なので無理です。


Windows IE 環境ならVbscript、Jscriptで可能かもしれません。
あるいは、人が対象ファイルを開いてtextareaに貼り付けするしかないですね、もっともバイナリーファイルなら事前に別途クライアント側でエンコードする必要がありますね。

それともPROXYとなる自分のCGIプログラムを作ってそこから変換してPOSTさせるとか

この回答への補足

やはり無理ですか…。
Ajaxで送信する際に、転送するファイル(データ)へアクセスできるかと思ったのですが、残念です。

CGIを使って1クッション置く方法はダメだった場合に考えているのですが
転送するファイルの容量が大きく、CGIのサーバ側でリミットを変更する必要があり、できれば…と思っています。

ありがとうございました。

補足日時:2009/07/08 19:17
    • good
    • 0

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