2016-10-12 9 views
0

私は、mysql database.soに保存されているサーバから画像を取得しているアンドロイドアプリを作成しています。ダウンロードする前にファイルサイズが必要です。このコードを使用しています。androidのサーバからファイルサイズ= -1を返す

 FileOutputStream fileOutput = new FileOutputStream(file); 

     InputStream inputStream = urlConnection.getInputStream(); 
    int totalSize = urlConnection.getContentLength(); 

が、常に私はtotalsize = -1 1.Iを取得していますが、これは私がこの問題

+1

古い質問に対する1つの関連する回答はここにあります:[Android getContentLengthは常にapkファイルをダウンロードすると-1を返します](http://stackoverflow.com/questions/32988325/android-getcontentlength-always-return-1-when- downloading-apk-file/32990226#32990226)と[関連する詳しい回答はStackOverflowで見つけることができます](http://stackoverflow.com/search?q=android+getcontentlength+-1)。 –

答えて

2

を解決するのに役立つhappening.plzあるサーバが応答ヘッダでContent-Length設定されていないようだ理由を知りません。

+0

これは、レスポンスヘッダーでContent-Lengthを設定するように行うことができます。 –

+0

はい、あなたはその仲間をすることができます! – Carnal

+0

どうすればいいですか? –

0

Webサーバーで適切なContent-Lengthヘッダーが設定されていません。

From the docs for URLConnection.getContentLength()

この接続のURLが参照するリソースのコンテンツ長、-1コンテンツの長さにInteger.MAX_VALUEよりも大きい場合、コンテンツの長さが知られ、またはされていない場合。

getContentLength()は、送信されたバイト数を返し、何を予測するために使用することはできません。getContentLengththat may be entirely off、コンテンツがどのくらいお見せするために、正の整数を返す場合でも、しかし

、圧縮されたストリームの場合、バイトはgetInputStream()から読み取ることができます。代わりに、ストリームがなくなるまで(つまり、read()が-1を返す)ストリームを読み取ります。

実際にファイルサイズを知る必要がある場合は、独自のヘッダーフィールドを定義してその値を使用することをお勧めします。

0

おそらく、サイズがintよりも大きい可能性があります。 getContentLengthLong()を使用する方が良いです。このlinkがお手伝いします。

関連する問題