Схема URI не является файлом,
Я получаю исключение: "URI-схема не является файлом"
Я пытаюсь получить имя файла, а затем сохранить этот файл (с другого сервера) на свой компьютер/сервер из сервлета.
У меня есть строка, называемая "url", отсюда вот мой код:
url = Streams.asString(stream); //gets the URL from a form on a webpage
System.out.println("This is the URL: "+url);
URI fileUri = new URI(url);
File fileFromUri = new File(fileUri);
onlyFile = fileFromUri.getName();
URL fileUrl = new URL(url);
InputStream imageStream = fileUrl.openStream();
String fileLoc2 = getServletContext().getRealPath("pics/"+onlyFile);
File newFolder = new File(getServletContext().getRealPath("pics"));
if(!newFolder.exists()){
newFolder.mkdir();
}
IOUtils.copy(imageStream, new FileOutputStream("pics/"+onlyFile));
}
Линия, вызывающая ошибку, следующая:
File fileFromUri = new File(fileUri);
Я добавил остальную часть кода, чтобы вы могли видеть, что я пытаюсь сделать.
Ответы
Ответ 1
URI "схема" - это то, что приходит перед ":", например "http" в "/fooobar.com/...".
В сообщении об ошибке сообщается, что new File(fileUri)
работает только в URI файла "file:" (те, которые ссылаются на имя пути в текущей системе), а не на другие схемы, такие как "http".
В принципе, URI "file:" - это еще один способ указать путь к классу File
. Это не волшебный способ сказать File
использовать http для извлечения файла из Интернета.
Ответ 2
Ваше предположение о создании File
из URL
здесь неверно.
Вам просто не нужно создавать File
из URL-адреса в файл в Интернете, чтобы вы получили имя файла.
Вы можете просто сделать это с помощью синтаксического анализа URL-адреса:
URL fileUri = new URL("http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/domefisheye/ladybug/fish4.jpg");
int startIndex = fileUri.toString().lastIndexOf('/');
String fileName = fileUri.toString().substring(startIndex + 1);
System.out.println(fileName);