Java 在Android中下载getcontentlength()时返回-1

Java 在Android中下载getcontentlength()时返回-1,java,android,web-services,web-applications,download,Java,Android,Web Services,Web Applications,Download,我正在开发一个Android应用程序,我正在下载一个文件,并在进度条中显示进度。为此,我需要知道文件的长度。但它返回-1。它与本地服务器配合良好。但一旦移动到live server,问题就开始了。所以任何人都可以帮我 URL url = new URL("URL TO DOWNLOAD"); URLConnection conection = url.openConnection(); HttpURLConnection httpUrlConn = (HttpURLConnection) con

我正在开发一个Android应用程序,我正在下载一个文件,并在进度条中显示进度。为此,我需要知道文件的长度。但它返回-1。它与本地服务器配合良好。但一旦移动到live server,问题就开始了。所以任何人都可以帮我

URL url = new URL("URL TO DOWNLOAD");
URLConnection conection = url.openConnection();
HttpURLConnection httpUrlConn = (HttpURLConnection) conection;
httpUrlConn.connect();
int fileLength = connection.getContentLength();

这里我得到的文件长度为-1。为什么会这样?有没有办法避免它并获得正确的长度?

检查您的URL路径页面,我认为该页面上没有任何数据。

阅读此

getContentLength()返回内容长度标题字段的值


此连接的URL引用的资源的内容长度,如果内容长度未知,则为-1。

同样的事情也总是发生在我身上。这个-1真的把我们的进度条搞砸了,不是吗?你知道我是干什么的吗?我重命名该文件(是的,就在服务器上),然后将其重新更改。问题消失了。纯魔法。。。此外,还有一个快速而肮脏的解决方法:若您知道有问题的文件的精确长度,您可以简单地用该数字替换-1。是的,换一个就行了。例如,我的应用程序从我的个人网站下载文件,因此我100%确定这些文件已就位。我也知道它们的大小是一个字节。因此:

    @Override
    protected String doInBackground(String... aurl) {
        int realLOF = 1234567890;     // personally, I use an array element here 
        boolean badLOF = false;
        try {
             URL url = new URL(aurl[0]);
             URLConnection connection = url.openConnection();
             connection.connect();

             int lengthOfFile = connection.getContentLength();
             if (lengthOfFile == -1) {
             lengthOfFile = realLOF;             // yeah, I know. Unhealthy :(
             badLOF = true;                  
            }
             Log.d("DL", "LOF: " + lengthOfFile + ", badLOF: " + badLOF);

        // your DL logic here

               } catch (Exception e) {
        // whatever
               }
            return null;
        }
    // my app runs batch downloads so I made a recursive loop:
    // DownloadFileAsync().execute(url) calls itself on onPostExecute(),
    // and that's how badLOF resets itself. 
当然,只有当您能够管理这些文件时,这种方法才会起作用。有趣的是,问题1)在相同的文件中重复出现,2)显然与文件大小本身无关:首先,它发生在大小文件(如100MB和1kB)上,其次,我只在HostMonster FileHoster上遇到过。不,我不是开什么车,我喜欢他们的服务质量。只是想知道如何修复断轴,仅此而已


HTH.

如果相同的url通过java应用程序命中,则其工作正常。但它不适用于iphone和android。