2016-09-26 72 views
1

在我的应用程序中,我通过HTTP连接从服务器下载媒体。无论如何连接断开时(例如,没有n/w,权限撤销),下载文件时会部分下载。Android部分下载http

此前我们正在删除文件并从头开始下载。

现在,需求发生了变化。我必须从我离开的地方继续(如在WhatsApp中)。

所以我正在做的是检查文件的存在,如果文件存在跳过流。请找到下面的代码片段。

InputStream is = con.getInputStream(); 

File file = new File(targetPath); 
boolean fileExist = file.exists(); 
if (fileExist) { 
    long skippedBytes = is.skip(file.length()); 
} 

// opens an output stream to save into file 
OutputStream os = new FileOutputStream(targetPath, fileExist); 

它的工作仅仅是跳过而实际上不工作。说,文件(视频)的长度是20秒,并在第一次尝试我下载了6秒,其后休息。但是当我播放它只是播放到6秒,然后抛出通常的视频播放错误。

+1

使用'InputStream.skip'不作SENS ...它仍然会被下载,但跳过......如果服务器支持Range头,我宁愿用它 – Selvin

+0

@Selvin,我知道这不会救带宽,但它应该工作。为了节省带宽,我们需要在服务器端跳过。我正试图在客户端实现(不用担心带宽)使用跳过。 –

+2

我宁愿使用http头'Range',如果它支持后端 – Blackbelt

回答

0
File file = new File(targetPath); 

if (file.exists()) { 
    con.setRequestProperty("Range", "bytes=" + (file.length()) + "-"); 
} else { 
    con.setRequestProperty("Range", "bytes=" + 0 + "-"); 
}