ファイルへの直接リンクである場合とそうでない場合がある特定の 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);
ヘッダーなどからファイル名を取得する簡単な方法があるはずですが、取得方法がわかりません。前もって感謝します、