用传统方法使用HttpURLConnection进行上传时,进度条显示过快,达到100%之后会卡很长时间,其实此时还在上传。这是因为HttpURLConnection自己维护的一个缓存,先把要上传的数据写入缓存里,然后才传。而我们得到的进度却是写入缓存的进度,所以进度条会更新很快。可以通过下列方法禁掉缓存:
URL uri = new URL(post_url);
conn = (HttpURLConnection) uri.openConnection();
conn.setReadTimeout(100000);
conn.setConnectTimeout(100000);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setFixedLengthStreamingMode((int) (before.length + simpleUploadTask.fileSize + after.length));//主要是这句,用来禁掉缓存,不过需要将上传数据的大小传进去
conn.setUseCaches(false);
conn.setAllowUserInteraction(false);
conn.setRequestProperty("Connection", "close");
System.setProperty("http.keepAlive", "false");
conn.setRequestMethod("POST"); // Post方式
conn.setRequestProperty("Charsert", "UTF-8");
conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);