首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下载的文件有0字节

下载的文件有0字节
EN

Stack Overflow用户
提问于 2015-07-30 17:27:51
回答 2查看 2.6K关注 0票数 3

我正在尝试将.mp3音乐文件从这个URL下载到项目根目录,但是下载的文件总是大小为0字节(它是空的)。下载也会立即停止。

我使用以下代码:

代码语言:javascript
复制
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.commons.io.FileUtils;

public class MusicDownloader
{
    public static void main(String[] arguments) throws MalformedURLException, IOException
    {
        download("https://www.youtube.com/audiolibrary_download?vid=d0a68933f592c297", "Ponies and Balloons");
    }

    public static void download(String url, String fileName) throws MalformedURLException, IOException
    {
        FileUtils.copyURLToFile(new URL(url), new File(fileName + ".mp3"));
    }
}

在浏览器中,手动下载文件是完美的。从另一个网站下载链接,例如这一个,代码处理没有问题。这里有什么问题吗?

发送有效的用户代理字符串也不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-30 18:17:36

问题实际上在于您的URL https://www.youtube.com/audiolibrary_download?vid=d0a68933f592c297。实际上,当资源临时移动- 301状态代码时,它会发出重定向。所以你需要选择它的新URL。我尝试使用它HttpURLConnection来查看新的重定向url是https://youtube-audio-library.storage.googleapis.com/d0a68933f592c297。您可以使用以下代码:-

代码语言:javascript
复制
String urlString = "https://www.youtube.com/audiolibrary_download?vid=d0a68933f592c297";
        URL url = new URL(urlString);
        HttpURLConnection huc = (HttpURLConnection)url.openConnection();
        int statusCode = huc.getResponseCode(); //get response code
        if (statusCode == HttpURLConnection.HTTP_MOVED_TEMP
                || statusCode == HttpURLConnection.HTTP_MOVED_PERM){ // if file is moved, then pick new URL
            urlString = huc.getHeaderField("Location");
            url = new URL(urlString);
            huc = (HttpURLConnection)url.openConnection();
        }
        System.out.println(urlString);  
        InputStream is = huc.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);
        FileOutputStream fos = new FileOutputStream("test.mp3");
        int i = 0;
        while ((i = bis.read()) != -1)
            fos.write(i);

您可以检查的相同效果是否可以在FileUtils中使用。我相信,应该是这样的。干杯:)

票数 4
EN

Stack Overflow用户

发布于 2015-07-30 17:33:41

因为这是非法的,而且是针对Youtube服务条款

Youtube专门禁止从他们的网站下载mp3的大多数通用方式。一个简单的10行代码不起作用,否则盗版就会比现在更大。

如果他们抓到你,你会被堵住

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31730354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档