[英]Downloading binary file from url
我正在使用此代碼從URL下載文件:
FileUtils.copyURLToFile(url, new File("C:/Songs/newsong.mp3"));
例如,當我使用“ https://mjcdn.cc/2/282676442/MjUgU2FhbCAtIFZlZXQgQmFsaml0Lm1wMw== ”創建網址時,此方法就可以正常工作並且可以下載mp3。 但是,如果我使用另一個URL:“ https://dl.jatt.link/hd.jatt.link/a0339e7c772ed44a770a3fe29e3921a8/uttzv/Hummer-(Mr-Jatt.com).mp3 ”,則文件為0kb。
我可以從Web瀏覽器中的這兩個URL下載文件。 這是怎么了,我該如何解決。
我注意到您的2個網址之間存在差異:
瀏覽器可以遵循重定向,但是由於某種原因(請參閱下文),您的程序不能。
我建議您使用HTTP客戶端庫(例如Apache HTTP客戶端或Jsoup ),並將其配置為遵循重定向(如果默認情況下不這樣做)。
例如,對於Jsoup,您將需要如下代碼:
String url = "https://dl.jatt.link/hd.jatt.link/a0339e7c772ed44a770a3fe29e3921a8/uttzv/Hummer-(Mr-Jatt.com).mp3";
String filename = "C:/Songs/newsong.mp3";
Response r = Jsoup.connect(url)
//.followRedirects(true) // follow redirects (it's the default)
.ignoreContentType(true) // accept not just HTML
.maxBodySize(10*1000*1000) // accept 10M bytes (default is 1M), or set to 0 for unlimited
.execute(); // send GET request
FileOutputStream out = new FileOutputStream(new File(filename));
out.write(r.bodyAsBytes());
out.close();
@EJP評論的更新:
FileUtils
類 。 它調用接收到的URL
對象的openStream()
。 openStream()
是openConnection().inputStream()
的簡寫。 openConnection()
返回一個URLConnection
對象。 如果存在URL
使用的協議的適當子類,它將返回該子類的實例。 在這種情況下,這是HttpsURLConnection
,它是HttpURLConnection
的子類。 HttpURLConnection
定義的,默認情況下確實為true
: 設置此類是否應自動遵循HTTP重定向(響應代碼為3xx的請求)。 默認為True。
HttpsURLConnection
似乎並沒有正確地處理從HTTPS到HTTP的重定向。 -在以下評論中提到的@VGR就是這種情況。 HttpsURLConnection
讀取Location
標頭,然后在新的HttpURLConnection
使用它,可以手動處理重定向。 ( 示例 )(如果Jsoup這樣做也不會感到驚訝。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.