我有一台托管WiFi接入点的设备和一台Web服务器,可以接受新的空中下载(OTA)固件。
从浏览器访问网页时,使用带有文件上传字段的HTML表单,我可以在大约2.5分钟内发布新固件。设备需要一系列HTTP POST,查询字符串中的偏移量会更改每个请求,并在POST正文中更改二进制固件数据。 POST是使用XMLHttpRequest在Javascript中完成的,并在发送下一个固件块(块大小为1024字节)之前等待200个响应。
尝试使用HttpURLConnection在Android应用中重新创建上传过程,相同的固件文件需要大约32分钟才能上传。每个具有1024字节固件数据的POST都需要3秒钟以上才能完成。这是我在AsynTask中用于上传数据的代码:
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class RequestFilter implements Filter {
public RequestFilter() {}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletRequest httpRequest = (HttpServletRequest) request;
Enumeration<String> headerNames = httpRequest.getHeaderNames(); //print this to see all headers
httpRequest.getHeader("host"); //returns the host header
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig filterConfig) {}
@Override
public void destroy() {}
}
我滥用HttpURLConnection导致其移动如此缓慢,还是有更好的方法来发布一系列HTTP请求?