package com.coderising.download.impl; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import com.coderising.download.api.Connection; import com.coderising.download.api.ConnectionException; import com.coderising.download.api.ConnectionManager; public class ConnectionManagerImpl implements ConnectionManager { @Override public Connection open(String fileURL, int startPos, int endPos) throws ConnectionException { try { System.out.println("try to open file url: " + fileURL); URL url = new URL(fileURL); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); // 设定读取range httpConn.setRequestProperty("Range", "bytes=" + startPos + "-" + endPos); System.out.println("Range: bytes=" + startPos + "-" + endPos); int responseCode = httpConn.getResponseCode(); System.out.println("server replied HTTP code: " + responseCode); if (responseCode == HttpURLConnection.HTTP_OK || responseCode == HttpURLConnection.HTTP_PARTIAL) { System.out.println("return new ConnectionImpl"); return new ConnectionImpl(httpConn, fileURL); } else { throw new ConnectionException("server replied HTTP code: " + responseCode); } } catch (IOException e) { throw new ConnectionException(e); } } @Override public int getContentLength(String fileURL) throws ConnectionException { try { System.out.println("try to open file url: " + fileURL); URL url = new URL(fileURL); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); int responseCode = httpConn.getResponseCode(); System.out.println("server replied HTTP code: " + responseCode); if (responseCode == HttpURLConnection.HTTP_OK) { System.out.println("return contentLength: " + httpConn.getContentLength()); int contentLength = httpConn.getContentLength(); httpConn.disconnect(); return contentLength; } else { throw new ConnectionException("server replied HTTP code: " + responseCode); } } catch (IOException e) { throw new ConnectionException(e); } } }