Я повторно реализую функциональность с HttpComponents
вместо Commons-IO
. Этот код позволяет загружать файл на Java в соответствии с его URL-адресом и сохранять его в определенном месте.
Окончательный код:
public static boolean saveFile(URL imgURL, String imgSavePath) {
boolean isSucceed = true;
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(imgURL.toString());
httpGet.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.11 Safari/537.36");
httpGet.addHeader("Referer", "https://www.google.com");
try {
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity imageEntity = httpResponse.getEntity();
if (imageEntity != null) {
FileUtils.copyInputStreamToFile(imageEntity.getContent(), new File(imgSavePath));
}
} catch (IOException e) {
isSucceed = false;
}
httpGet.releaseConnection();
return isSucceed;
}
Конечно, приведенный выше код занимает больше места, то только одну строку кода:
FileUtils.copyURLToFile(imgURL, new File(imgSavePath),
URLS_FETCH_TIMEOUT, URLS_FETCH_TIMEOUT);
, но это даст вам больший контроль над процессом и позволяют указывать не только тайм-ауты, но и User-Agent
и Referer
значения, которые имеют решающее значение для многих веб-сайтов.
Я уже использую 'Apache HttpComponents', но не знаю, как объединить функции' copyURLToFile' и 'HttpComponents'. –
вы не используете copyToUrl, вы можете использовать пакет https nio и использовать канал файла для записи данных в файл – GerritCap