|
@@ -21,6 +21,8 @@ import static com.tzld.piaoquan.longarticle.common.constants.ProxyConstant.*;
|
|
|
@Slf4j
|
|
|
public class VideoDownloader {
|
|
|
|
|
|
+ private static final long READ_TIMEOUT_SECONDS = 60; // 读取超时时间(秒)
|
|
|
+
|
|
|
private static final int MAX_RETRIES = 3;
|
|
|
|
|
|
public static String downloadCover(String outVideoId, String platform, String coverUrl) {
|
|
@@ -99,16 +101,21 @@ public class VideoDownloader {
|
|
|
|
|
|
int responseCode = connection.getResponseCode();
|
|
|
if (responseCode == HttpURLConnection.HTTP_OK || responseCode == HttpURLConnection.HTTP_PARTIAL) {
|
|
|
- // 下载文件
|
|
|
try (InputStream inputStream = connection.getInputStream();
|
|
|
- OutputStream outputStream = Files.newOutputStream(file.toPath())) { // 追加模式
|
|
|
- byte[] buffer = new byte[1024 * 1024]; // 1MB buffer
|
|
|
+ OutputStream outputStream = Files.newOutputStream(file.toPath())) {
|
|
|
+ byte[] buffer = new byte[1024 * 1024];
|
|
|
+ long lastReadTime = System.currentTimeMillis();
|
|
|
int bytesRead;
|
|
|
while ((bytesRead = inputStream.read(buffer)) != -1) {
|
|
|
outputStream.write(buffer, 0, bytesRead);
|
|
|
+ lastReadTime = System.currentTimeMillis();
|
|
|
+ // 检查是否长时间没有读取到新数据
|
|
|
+ if (System.currentTimeMillis() - lastReadTime > READ_TIMEOUT_SECONDS * 1000) {
|
|
|
+ log.error("No data read for a long time, aborting download.");
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- // 检查文件是否为空
|
|
|
if (file.length() != 0) {
|
|
|
return 0;
|
|
|
}
|