- PR -

HTTPを使用してのファイル送信

1
投稿者投稿内容
あおむし
会議室デビュー日: 2009/04/02
投稿数: 2
投稿日時: 2009-04-02 17:49
現在、HTTPにてPOSTで、CSVファイルを送信する処理を実装中です。

今回、相手側の指定により、Content-Typeをmultipart/form-dataではなく、application/x-www-form-urlencodedで送信する必要があります。

multipart/form-dataでファイル送信を行った経験はあるのですが、今回のようなケースは初めてでして、試行錯誤しております。

1.以下のような実装を行ったのですが、
  これは間違いではないでしょうか?
  処理に問題がある、このような方法は本来間違えている
  などご指摘頂ければ助かります。

2.その他ライブラリや、サンプルページ等ご存知でしたら、教えてください。

よろしくお願いいたします。

/**
* メイン
* @param args 0:URL,1:送信CSVパス
*/
public static void main(String[] args) {

System.out.println("url:" + args[0]);
System.out.println("csvパス:" + args[1]);
String urlStr = args[0];

HttpClient client = new HttpClient();

PostMethod method = new PostMethod(urlStr);

// ----------------------------------------------------
// 要求パラメータを設定
// ----------------------------------------------------
File file = new File(args[1]);
BufferedInputStream in = null;
StringWriter out = null;
String csvDataStr = "";
try {
in = new BufferedInputStream(new FileInputStream(file));
out = new StringWriter();
int buff = 0;
while((buff = in.read()) != -1){
out.write(buff);
}
out.flush();
csvDataStr = out.toString();
} catch (FileNotFoundException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (IOException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
method.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; ");
method.setParameter("CSV", csvDataStr);

// ----------------------------------------------------
// 送信
// ----------------------------------------------------
String responseBody = null;
try {
int statusCode = client.executeMethod(method);

if (statusCode != HttpStatus.SC_OK) {
System.out.println("HTTP応答不良[" + statusCode + "]");
}
responseBody = method.getResponseBodyAsString();
} catch (ConnectTimeoutException e) {
//タイムアウトエラー
System.out.println(e);

} catch (IOException e) {
//I/Oエラー
System.out.println(e);

} finally {
method.releaseConnection();
}
}
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2009-04-02 18:03
URLエンコードが要りますね。使っている文字が英数字だけなら大丈夫かも知れませんが。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2009-04-02 19:29
ファイルの中身(テキスト)を丸ごとURLエンコードして、
POSTで送るというのはやったことが有ります。
単に都合で送受信方法を単純にしたいという都合からでしたが、
特に問題なくやりとりができるかと思います。

私のケースは、送り側がExcelでXMLHTTP、
受け側がPHPと、今回とは全然話が違いますが、
処理が割と単純で済むのでそういう方法にしました。

なんというか「間違いとは言い切れないでしょう。」ということです。
間違いかどうか答えを知っているのは相手でしょう?
ここで聞いても正しい答えなんてわかりませんよ。
あおむし
会議室デビュー日: 2009/04/02
投稿数: 2
投稿日時: 2009-04-03 11:42
>mio様
現在の仕様では、全角文字は不要ですので、
エンコードについては問題ないと考えております。
ご指摘ありがとうございます。

>かつのり様
ご指摘ありがとうございます。
そうですね、仕様については相手に確認するべきですね。
ファイル内容を、リクエストパラメタに設定する際の実装方法。
リクエストパラメタにファイル内容を設定して送信するということが
一般的な手法なのか。
というところを不安・疑問に思いましたので、
書き込みさせて頂きました。説明がいきとどかなくて申し訳ありません。

送受信方法を単純にするという目的で、このような方式でやりとりする
ことがあるんですね。確かに、処理は単純で済みますね。
すっきりしました。ありがとうございます。

mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2009-04-03 14:10
引用:

あおむしさんの書き込み (2009-04-03 11:42) より:
>mio様
現在の仕様では、全角文字は不要ですので、
エンコードについては問題ないと考えております。


改行コードも入らないわけですか。
1

スキルアップ/キャリアアップ(JOB@IT)