所以我有一个代码,我可以使用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) {
}
}
问题是,通过这种实现,我无法发送大数据,因为字节数组必须全部适合内存。什么是通过HTTP POST在Android中发送大数据的最佳方式,最好是没有第三方库?
答案 0 :(得分:2)
使用HttpURLConnection来传输文件,而不是发布整个内容。您也可能希望在AsyncTask内执行此操作。
我打算写一些东西,但事实证明某人已经有here ...
答案 1 :(得分:1)
使用HttpURLConnection而不是DefaultHTTPClient。
使用getDoOutput(true)使其发布并使用getOutputStream()来获取要写入的输出流。