2016-09-26 7 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秒まで再生し、通常のビデオ再生エラーを投げた後。 InputStream.skip`はSENSをしない `使用

+1

...それはまだダウンロードされますが、スキップ...サーバが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 + "-"); 
} 
関連する問題