我正在尝试将.mp3音乐文件从这个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"));
}
}在浏览器中,手动下载文件是完美的。从另一个网站下载链接,例如这一个,代码处理没有问题。这里有什么问题吗?
发送有效的用户代理字符串也不起作用。
发布于 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。您可以使用以下代码:-
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中使用。我相信,应该是这样的。干杯:)
发布于 2015-07-30 17:33:41
https://stackoverflow.com/questions/31730354
复制相似问题