2

したがって、以下のコードを使用して HTTP POST を使用してサーバーにデータを送信できるコードがあります。

import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.Path;

import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;

public void sendData() {
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(SERVER_URL);

    Path path = Paths.get("path/to/file");
    byte[] data = Files.readAllBytes(path);

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("data",Base64.encodeBytes(data)));
    nameValuePairs.add(new BasicNameValuePair("id", "123"));

    try {

        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);
    } catch (Exception e) {
    } 
}

問題は、この実装では、バイト配列がすべてメモリに収まる必要があるため、大きなデータを送信できないことです。AndroidでHTTP POSTを介して、できればサードパーティのライブラリなしで大きなデータを送信する最良の方法は何ですか?

4

2 に答える 2

2

全体を投稿するのではなく、HttpURLConnectionを使用してファイルをストリーミングします。また、おそらくAsyncTask内でこれを実行したいと思うでしょう。

私は何かを書くつもりでしたが、誰かがすでにここにいることがわかりました...

于 2013-11-06T23:57:20.057 に答える
1

DefaultHTTPClient の代わりに HttpURLConnection を使用します。

getDoOutput(true) を使用して投稿させ、getOutputStream() を使用して書き込み先の出力ストリームを取得します。

于 2013-11-06T23:37:47.247 に答える