|
|
|
@ -7,15 +7,11 @@ import io.mola.galimatias.GalimatiasParseException;
|
|
|
|
|
import org.apache.commons.io.FileUtils;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.FileNotFoundException;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
|
|
import java.net.HttpURLConnection;
|
|
|
|
|
import java.net.URL;
|
|
|
|
|
import java.net.URLDecoder;
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
|
|
import static cn.keking.utils.KkFileUtils.isFtpUrl;
|
|
|
|
@ -40,7 +36,6 @@ public class DownloadUtils {
|
|
|
|
|
public static ReturnResponse<String> downLoad(FileAttribute fileAttribute, String fileName) {
|
|
|
|
|
// 忽略ssl证书
|
|
|
|
|
String urlStr = null;
|
|
|
|
|
HttpURLConnection urlcon;
|
|
|
|
|
try {
|
|
|
|
|
SslUtils.ignoreSsl();
|
|
|
|
|
urlStr = fileAttribute.getUrl().replaceAll("\\+", "%20");
|
|
|
|
@ -49,7 +44,9 @@ public class DownloadUtils {
|
|
|
|
|
}
|
|
|
|
|
ReturnResponse<String> response = new ReturnResponse<>(0, "下载成功!!!", "");
|
|
|
|
|
String realPath = getRelFilePath(fileName, fileAttribute);
|
|
|
|
|
if(!StringUtils.hasText(realPath)){
|
|
|
|
|
|
|
|
|
|
// 判断是否非法地址
|
|
|
|
|
if (KkFileUtils.isIllegalFileName(realPath)) {
|
|
|
|
|
response.setCode(1);
|
|
|
|
|
response.setContent(null);
|
|
|
|
|
response.setMsg("下载失败:文件名不合法!" + urlStr);
|
|
|
|
@ -67,57 +64,14 @@ public class DownloadUtils {
|
|
|
|
|
response.setMsg(fileName);
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
if(realPath.equals("cunzhai")){
|
|
|
|
|
response.setContent(fileDir + fileName);
|
|
|
|
|
// 如果文件是否已经存在、且不强制更新,则直接返回文件路径
|
|
|
|
|
if (KkFileUtils.isExist(realPath) && !fileAttribute.forceUpdatedCache()) {
|
|
|
|
|
response.setContent(realPath);
|
|
|
|
|
response.setMsg(fileName);
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
URL url = WebUtils.normalizedURL(urlStr);
|
|
|
|
|
if (!urlStr.toLowerCase().startsWith("ftp:")&& !urlStr.toLowerCase().startsWith("file")){
|
|
|
|
|
urlcon=(HttpURLConnection)url.openConnection();
|
|
|
|
|
urlcon.setConnectTimeout(30000);
|
|
|
|
|
urlcon.setReadTimeout(30000);
|
|
|
|
|
urlcon.setInstanceFollowRedirects(false);
|
|
|
|
|
int responseCode = urlcon.getResponseCode();
|
|
|
|
|
if(responseCode != 200){
|
|
|
|
|
if (responseCode == HttpURLConnection.HTTP_MOVED_PERM || responseCode == HttpURLConnection.HTTP_MOVED_TEMP) { //301 302
|
|
|
|
|
url =new URL(urlcon.getHeaderField("Location"));
|
|
|
|
|
}
|
|
|
|
|
if (responseCode == 403|| responseCode == 500) { //301 302
|
|
|
|
|
response.setCode(1);
|
|
|
|
|
response.setContent(null);
|
|
|
|
|
response.setMsg("下载失败:地址错误!" + urlStr);
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
if (responseCode == 404 ) { //404
|
|
|
|
|
try {
|
|
|
|
|
urlStr = URLDecoder.decode(urlStr, "UTF-8");
|
|
|
|
|
urlStr = URLDecoder.decode(urlStr, "UTF-8");
|
|
|
|
|
url = WebUtils.normalizedURL(urlStr);
|
|
|
|
|
urlcon=(HttpURLConnection)url.openConnection();
|
|
|
|
|
urlcon.setConnectTimeout(30000);
|
|
|
|
|
urlcon.setReadTimeout(30000);
|
|
|
|
|
urlcon.setInstanceFollowRedirects(false);
|
|
|
|
|
responseCode = urlcon.getResponseCode();
|
|
|
|
|
if (responseCode == HttpURLConnection.HTTP_MOVED_PERM || responseCode == HttpURLConnection.HTTP_MOVED_TEMP) { //301 302
|
|
|
|
|
url =new URL(urlcon.getHeaderField("Location"));
|
|
|
|
|
}
|
|
|
|
|
if(responseCode == 404 ||responseCode == 403|| responseCode == 500 ){
|
|
|
|
|
response.setCode(1);
|
|
|
|
|
response.setContent(null);
|
|
|
|
|
response.setMsg("下载失败:地址错误!" + urlStr);
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
} catch (UnsupportedEncodingException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}finally {
|
|
|
|
|
assert urlcon != null;
|
|
|
|
|
urlcon.disconnect();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!fileAttribute.getSkipDownLoad()) {
|
|
|
|
|
if (isHttpUrl(url)) {
|
|
|
|
|
File realFile = new File(realPath);
|
|
|
|
@ -163,25 +117,12 @@ public class DownloadUtils {
|
|
|
|
|
} else { // 文件后缀不一致时,以type为准(针对simText【将类txt文件转为txt】)
|
|
|
|
|
fileName = fileName.replace(fileName.substring(fileName.lastIndexOf(".") + 1), type);
|
|
|
|
|
}
|
|
|
|
|
// 判断是否非法地址
|
|
|
|
|
if (KkFileUtils.isIllegalFileName(fileName)) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String realPath = fileDir + fileName;
|
|
|
|
|
File dirFile = new File(fileDir);
|
|
|
|
|
if (!dirFile.exists() && !dirFile.mkdirs()) {
|
|
|
|
|
logger.error("创建目录【{}】失败,可能是权限不够,请检查", fileDir);
|
|
|
|
|
}
|
|
|
|
|
Boolean forceUpdatedCache = fileAttribute.forceUpdatedCache();
|
|
|
|
|
//判断是否启用强制更新功能如果启用 文件必须重新下载
|
|
|
|
|
if (null == forceUpdatedCache || !forceUpdatedCache) {
|
|
|
|
|
// 文件已在本地存在,跳过文件下载
|
|
|
|
|
File realFile = new File(realPath);
|
|
|
|
|
if (realFile.exists()) {
|
|
|
|
|
fileAttribute.setSkipDownLoad(true);
|
|
|
|
|
return "cunzhai"; //这里给的值是不能修改的 对应的是下载方法里面有个强制输出地址的
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return realPath;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|