Java - HttpUrlConnection等待下载完成

时间:2015-12-28 08:51:50

标签: java http youtube

我正在尝试使用他们网站上提供的youtubeinmp3 api下载YouTube视频,但问题是当我尝试转换已经不在其库中的歌曲时(意味着它还没有之前已转换),该网站将开始将此歌曲转换为.mp3格式。

现在我的HTTPUrlConnection正在发生的事情是,如果下载链接已经在网站上,因为它已经被缓存,那么它运行得很好但是如果网站必须执行转换,它会在没有等待转换的情况下运行 - 意思是我得到一个错误。

这是我目前所拥有的:

        URL link = new URL("http://YouTubeInMP3.com/fetch/?video=http://www.youtube.com/watch?v=JbjtL7P9eI0&autostart=1");

        InputStream in = new BufferedInputStream(link.openStream());
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        int n = 0;
        HttpURLConnection httpConnection = (HttpURLConnection) (new URL("http://YouTubeInMP3.com/fetch/?video=http://www.youtube.com/watch?v=JbjtL7P9eI0&autostart=1").openConnection());
        System.out.println(HttpURLConnection.HTTP_OK);
        long completeFileSize = httpConnection.getContentLength();
        long downloadedFileSize = 0;
        //int currentProgress = 0;
        while (-1!=(n=in.read(buf)))
        {
            out.write(buf, 0, n);
            downloadedFileSize += n;
            final int currentProgress= (int) (downloadedFileSize * 100 / completeFileSize);
            System.out.println("current progress: "+currentProgress);

        }
        System.out.println("Finished");
        out.close();
        in.close();
        byte[] response = out.toByteArray();

        FileOutputStream fos = new FileOutputStream("/Users/stephen/Desktop/test.mp3");
        fos.write(response);
        fos.close();

我想的是找到一种方法来停止我的程序的执行,或者只要网站没有完成加载就让它在while循环中运行。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

您打开连接两次 - 一次用于获取流,一次用于内容长度。如果你必须这样做,你应该接受-1作为正确的价值含义:不知道。

在这种情况下,只需跳过进度百分比并进行下载直到完成。

我建议仅使用1个HttpUrlConnection - 而不是两个