2

Android アプリケーションからサーバーに zip ファイルを送信しようとしていますが、411 の長さが必要なエラーが発生し続けます。

これが私がそれを行うために使用しているコードです。

    HttpPost post = new HttpPost("http://www.xyz.org/upload.json");
    post.setHeader(C.constants.HTTP_CONTENT_TYPE, "application/octet-stream");

    try {
        FileInputStream fis = new FileInputStream("/data/data/org.myapp.appname/app_content.zip");

        InputStreamEntity reqEntity = new InputStreamEntity(fis, -1);
        post.setEntity(reqEntity);
        String response = doPost(post);

        Log.v(tag, "response from server " + response);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

ここで何が間違っているのでしょうか。また、この投稿でパラメーターを追加してサーバーに送信する方法も知っているかもしれません。

4

1 に答える 1

1

multipartMIME タイプ、および各パラメータとファイルのパーツを使用する必要があります。私のこの古いブログ投稿を参照してください。

ご存じのとおり、HTTP リクエスト (およびレスポンス) は、ヘッダーとボディ (エンティティとも呼ばれます) の 2 つのセクションで構成されます。Content-Typeサーバー スクリプトが後続のバイトを解釈する方法を認識できるように、ヘッダーで a を指定します (同じ行でテキスト データのエンコードを指定することもできます)。

ヘッダーの後に、クライアントは空の行とオプションのエンティティを送信します。マルチパート エンティティは、境界で区切られたパーツのスタックのようなものです。これは、目的の HTTP 要求がネットワーク上でどのように見えるかです。

POST /path/to/script.json HTTP/1.1
Host: localhost
Content-Type: multipart/form-data; boundary=a2ksdf0?--

a2ksdf0?--
Content-Disposition: form-data; name="profile_picture"; filename="me.png"
Content-Type: image/png

<content here>
a2ksdf0?--
Content-Disposition: form-data; name="username";
Content-Type: text/plain

Joe Black

ところで、という名前のアップロード スクリプトを見たのは初めてupload.jsonです。サーバー側では何を使用していますか?

于 2012-12-03T23:02:13.650 に答える