Я пытаюсь загрузить файл с заданного 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);
Я уверен, что должен быть простой способ получить имя файла из заголовков или что-то в этом роде, но я не могу понять, как его получить. Заранее спасибо,
Content-Disposition: attachment; filename=myfile.zip
, вы можете извлечь из него имя файла. - person Ian Roberts   schedule 02.11.2012