我尝试将.mp3
音乐文件从this URL下载到项目根目录,但下载的文件大小总是0字节(空白)。下载也会立即停止。
我使用以下代码:
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"));
}
}
在浏览器中,手动下载文件可以正常运行。来自其他网站的下载链接,例如this one没有问题需要由代码处理。这可能是什么问题?
答案 0 :(得分:4)
问题实际上在于您的网址https://www.youtube.com/audiolibrary_download?vid=d0a68933f592c297
。它实际上是以资源温度移动 - 301 状态代码发出重定向。所以你需要选择新的URL
。我尝试使用HttpURLConnection
来查看新重定向的网址是https://youtube-audio-library.storage.googleapis.com/d0a68933f592c297
。您可以使用以下代码: -
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
或不同的效果。我相信,它应该是。干杯:)
答案 1 :(得分:-3)
因为它是违法的并且针对Youtube Terms of Service
Youtube专门阻止了从其网站下载mp3的大多数通用方法。简单的10行代码不会起作用或盗版会比现在更大。
如果他们抓住你,你将被阻止