1

BlackBerryアプリでJ2MEのHttpConnectionクラスを使用して、Webサーバーにデータを送信しています。HTTPリクエストの本文で画像のコンテンツを送信する必要があります。

これが私がすることです

  1. 配列内のファイルのバイトを取得します

  2. HTTP接続を開く

  3. コンテンツタイプヘッダーをimage/jpegとして設定します

  4. 接続の出力ストリームを取得します

  5. バイトを出力ストリームに書き込みます

  6. 出力ストリームと接続を閉じます

ただし、画像はサーバーにアップロードされません。何が問題なのですか?

ありがとう。

編集-コードを追加する

HttpConnection conn = null;
OutputStream out = null;

try{
    conn = new HttpConnection(Connector.open(myURL));
    conn.setRequestProperty("Content-Type", "image/jpeg");
    conn.setRequestMethod(HttpConnection.POST);
    conn.setRequestProperty("Content-Disposition", "form-data");
    conn.setRequestProperty("Connection", "Keep-Alive");

    out = conn.openOutputStream;
    out.write(buffer, 0, buffer.length);
    conn.setRequestProperty("Content-Length", buffer.length);
    out.flush();
}
catch(Exception e){
    e.printStackTrace();
}
finally{
    if(out != null)
        out.close();

    if(conn != null){
        System.out.println("" + conn.getResponseCode());
        conn.close();
    }
}

編集

同じコードを文字列で試してみると、正常に機能し、文字列をサーバーに送信します。しかし、それでも画像バイトには問題があります。

4

4 に答える 4

2

conn = 新しい HttpConnection(Connector.open(myURL));

この行は間違っています。Connection は、適切なプロトコル実装を調べて新しい Connection オブジェクトを作成するファクトリ クラスです。

HttpConnection conn = (HttpConnection) Connector.open(myURL);

コードの残りの部分は問題ないようです。投稿するときは、少なくとも content-type と content-length を定義する必要があります。

于 2009-06-16T12:27:00.370 に答える
1

ヘッダーを含むPOSTデータを送信するに、必ずすべてのヘッダーを設定する必要がありますContent-Length

また、応答のみのヘッダーではなく、リクエストに対して有効なヘッダーを送信していることを確認してください。

于 2009-05-07T22:55:36.590 に答える
0

バイト (できれば Base-64) をエンコードし、その文字列を送信する必要があります。生のバイトは、http セーフではない可能性があります。

次に、サーバー上でそれらをデコードしてバイト配列に戻し、それを使用して何をするかを行う必要があります (ファイルとして保存する、データベースに入れるなど)。

于 2009-05-21T19:11:34.013 に答える