fix: 修复下载地址302/301跳转的问题

Signed-off-by: 502647092 <admin@yumc.pw>
This commit is contained in:
502647092 2016-08-05 14:13:40 +08:00
parent 56131b1274
commit fb1811d9f4

View File

@ -3,8 +3,10 @@ package pw.yumc.Yum.managers;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.net.URLConnection;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -146,14 +148,15 @@ public class DownloadManager {
try { try {
sender.sendMessage("§6开始下载: §3" + getFileName(url)); sender.sendMessage("§6开始下载: §3" + getFileName(url));
sender.sendMessage("§6下载地址: §3" + url.toString()); sender.sendMessage("§6下载地址: §3" + url.toString());
final int fileLength = url.openConnection().getContentLength(); final URLConnection uc = reload(sender, url.openConnection());
final int fileLength = uc.getContentLength();
if (fileLength < 0) { if (fileLength < 0) {
sender.sendMessage("§6下载: §c文件 " + file.getName() + " 获取长度错误(可能是网络问题)!"); sender.sendMessage("§6下载: §c文件 " + file.getName() + " 获取长度错误(可能是网络问题)!");
sender.sendMessage("§6文件: §c" + file.getName() + " 下载失败!"); sender.sendMessage("§6文件: §c" + file.getName() + " 下载失败!");
return false; return false;
} }
sender.sendMessage("§6文件长度: §3" + fileLength); sender.sendMessage("§6文件长度: §3" + fileLength);
in = new BufferedInputStream(url.openStream()); in = new BufferedInputStream(uc.getInputStream());
if (!file.getParentFile().exists()) { if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs(); file.getParentFile().mkdirs();
sender.sendMessage("§6创建新目录: §d" + file.getParentFile().getAbsolutePath()); sender.sendMessage("§6创建新目录: §d" + file.getParentFile().getAbsolutePath());
@ -259,4 +262,22 @@ public class DownloadManager {
return sb.toString(); return sb.toString();
} }
/**
* 302 301跳转处理
*
* @param 跳转地址
* @return 最终地址
* @throws Exception
*/
private URLConnection reload(final CommandSender sender, final URLConnection uc) throws Exception {
final HttpURLConnection huc = (HttpURLConnection) uc;
// 302, 301
if (huc.getResponseCode() == HttpURLConnection.HTTP_MOVED_TEMP || huc.getResponseCode() == HttpURLConnection.HTTP_MOVED_PERM) {
final String url = huc.getHeaderField("Location");
sender.sendMessage("§6跳转至地址: §3" + url);
return reload(sender, new URL(url).openConnection());
}
return uc;
}
} }