Проблема с URL в Java - PullRequest
       3

Проблема с URL в Java

4 голосов
/ 05 августа 2011

Веб-страница содержит ссылку на исполняемый файл (т. Е. Если щелкнуть ссылку, браузер загрузит файл на локальный компьютер).

Есть ли способ достичь той же функциональности с Java?

Спасибо

Ответы [ 3 ]

1 голос
/ 05 августа 2011

Да, есть.Вот простой пример:

У вас может быть страница JSF (Java Server Faces) с вспомогательным компонентом поддержки, который содержит метод, аннотированный @PostConstruct Это означает, что произойдет любое действие (например, загрузка)когда страница создана.

Уже есть очень похожий вопрос, посмотрите на: Вызовите действие управляемого компонента JSF при загрузке страницы

1 голос
/ 05 августа 2011

Вы можете использовать Java, URL класс для загрузки файла, но это требует небольшой работы.Вам нужно будет сделать следующее:

  1. Создать точку объекта URL в файле
  2. Вызвать openStream(), чтобы получить InputStream
  3. Открыть файлВы хотите записать в (a FileOutputStream)
  4. Чтение из InputStream и запись в файл, пока не останется больше данных для чтения
  5. Закройте входной и выходной потоки

Неважно, какой тип загружаемого вами файла (факт, что это исполняемый файл не имеет значения), так как процесс являетсяТо же самое для файлов любого типа.

Обновление: Похоже, что вам действительно нужно подключить URL-адрес веб-страницы к приложению Java и получитьПриложение Java найдите ссылку на странице, а затем загрузите эту ссылку.Если это так, формулировка вашего вопроса очень неясна, но вот основные шаги, которые я бы использовал:

  1. Во-первых, используйте шаги 1 и 2 выше, чтобы получить InputStream дляpage
  2. Используйте что-то вроде TagSoup или jsoup для анализа HTML
  3. Найдите нужный элемент <a> и извлеките его hrefатрибут для получения URL-адреса файла, который нужно загрузить (если это относительный URL-адрес, а не абсолютный, вам нужно будет сопоставить этот URL-адрес с URL-адресом исходной страницы)
  4. Используйте описанные выше шаги для загрузки этогоURL

Вот небольшой ярлык, основанный на jsoup (который я никогда раньше не использовал, я просто пишу это из фрагментов, украденных с их веб-страницы).Я пропустил много проверок на ошибки, но, эй, я обычно взимаю за это:

Document doc = Jsoup.connect(pageUrl).get();
Element aElement = doc.getElementsByTag("a").first() // Obviously you may need to refine this
String newUrl = aElement.attr("abs:href"); // This is a piece of jsoup magic that ensures that the destination URL is absolute
// assert newUrl != null
URL fileUrl = new URL(newUrl);
String destPath = fileUrl.getPath();
int lastSlash = destPath.lastIndexOf('/');
if (lastSlash != -1) {
    destPath = destPath.substring(lastSlash);
}
// Assert that this is really a valid filename
// Now just download fileUrl and save it to destPath

правильный способ определить, каким должно быть имя файла назначения (если вы не указали жесткий код)это) фактически ищет заголовок Content-Disposition и ищет бит после filename=.В этом случае вы не можете использовать openStream() в URL, вам нужно будет использовать openConnection() вместо этого, чтобы получить URLConnection.Затем вы можете использовать getInputStream(), чтобы получить InputStream и getRequestProperty("Content-Disposition"), чтобы получить заголовок для определения вашего имени файла.В случае, если этот заголовок отсутствует или имеет неправильный формат, вам следует использовать описанный выше метод для определения имени файла назначения.

0 голосов
/ 05 августа 2011

Вы можете сделать это, используя Apache IO FileUtils

http://commons.apache.org/io/apidocs/org/apache/commons/io/FileUtils.html#copyURLToFile(java.net.URL, java.io.File)

Редактировать:

Мне удалось успешно загрузить zip-файл с исходного сайта forge (он не пустой), он сделал что-то вроде этого

import java.io.File;
import java.net.URL;

import org.apache.commons.io.FileUtils; 
public class Test 
{

 public static void main(String args[])
 {

    try {
        URL url = new URL("http://sourceforge.net/projects/gallery/files/gallery3/3.0.2/gallery-3.0.2.zip/download");
        FileUtils.copyURLToFile(url, new File("test.zip"));
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
   }
 }

Я также смог успешно загрузить tomcat.exe

URL url = новый URL ("http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.16/bin/apache-tomcat-6.0.16.exe");

...