Java 下载的文件有0个字节
我正试图将Java 下载的文件有0个字节,java,file,download,Java,File,Download,我正试图将.mp3音乐文件从下载到项目根目录,但下载的文件大小始终为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 { pu
.mp3
音乐文件从下载到项目根目录,但下载的文件大小始终为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"));
}
}
在浏览器中,手动下载文件可以完美地工作。来自另一个网站的下载链接,例如代码处理时没有问题。这里有什么问题
也不起作用。因为它是非法的,而且是违法的 Youtube特别屏蔽了从他们的网站下载mp3的大多数通用方式。一个简单的10行代码行不通,否则盗版会比现在更严重
如果他们抓到你,你将被阻止。问题实际上是你的URL
https://www.youtube.com/audiolibrary_download?vid=d0a68933f592c297
。它实际上发出了一个重定向作为资源临时移动-301状态代码。因此,您需要选择它的新URL
。我尝试使用它HttpURLConnection
查看新重定向的url是否为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
中是否可用。我相信,应该是这样。干杯:)不,这不是因为任何人都可以下载他们的免费音频库。他们甚至在这里自己提供下载链接:使用第三方程序/替代方法是非常必要的。这就是链接的目的,我真的不想点击下载100次。他们本应该想办法下载所有的东西,这就是我要做的我喜欢你的个人资料页上的个人资料,但是,你的答案是完全正确的incorrect@BullyWiiPlaza你为什么不在Youtube工作告诉他们我还没查过,但有可能是Youtube正在执行重定向,而Apache Commons IO没有遵循它们。@Powerlord:您建议使用哪种代码/方法来考虑/检测重定向?您太棒了,先生!我得到了状态代码303请参见其他
,因此我必须调整您的代码,但它可以工作;)@我很高兴这有帮助:)非常感谢你的回答@AnkitNigam。我遇到了同样的问题,URL被重定向,您的代码工作得很好。@evaldeslacasa很高兴它起了作用:)