我正在尝试从给定的 URL 下载文件,该 URL 可能是也可能不是文件的直接链接。如果 URL 是间接链接(即http://www.example.com/download.php?getFile=1 ) ,有谁知道我如何检测要写入的文件名?如果 URL 是从 URL 中提取文件名并开始写入提取的文件名的直接链接,则没有问题,但是使用重定向链接到目前为止我发现的唯一方法是写入任意文件名 - foo.txt -然后尝试使用它。问题是我真的需要正确的文件名(和扩展名)。我正在使用的代码示例是:(“else”子句中的部分既没有完成也没有工作):
public static boolean dlFile(String URL, String dest){
try{
URL grab = new URL(URL);
ReadableByteChannel rbc = Channels.newChannel(grab.openStream());
String fnRE = ".*/([a-zA-Z0-9\\-\\._]+)$";
Pattern pattern = Pattern.compile(fnRE);
Matcher matcher = pattern.matcher(URL);
String fName = "";
if(matcher.find()) fName = matcher.group(1);
else { //filename cannot be extracted - do something here - below doesn't work raises MalformedURLExcpetion
URL foo = new URL(URL);
HttpURLConnection fooConnection = (HttpURLConnection) foo.openConnection();
URL secondFoo = new URL(fooConnection.getHeaderField("Location"));
System.out.println("Redirect URL: "+secondFoo);
fooConnection.setInstanceFollowRedirects(false);
URLConnection fooURL = secondFoo.openConnection();
}
System.out.println("Connection to "+URL+" established!");
if(dest.endsWith("/")){}
else dest+="/";
System.out.println("Writing "+fName+" to "+dest);
FileOutputStream fos = new FileOutputStream(dest+fName);
fos.getChannel().transferFrom(rbc, 0, 1 << 24);
我确信必须有一种简单的方法来从标题或类似的东西中获取文件名,但我不知道如何获取它。提前致谢,