例外が発生します:「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);
私がやろうとしていることを確認できるように、残りのコードを追加しました。
URIの「スキーム」は、「:」の前にあるものです。たとえば、「 http://stackoverflow.com "」の「http」です。
エラーメッセージは、new File(fileUri)
が「file:」URI(現在のシステムのパス名を参照するもの)でのみ機能し、「http」のような他のスキームでは機能しないことを示しています。
基本的に、「file:」URIは、File
クラスへのパス名を指定するもう1つの方法です。これは、File
にhttpを使用してWebからファイルをフェッチするように指示する魔法の方法ではありません。
File
からURL
を作成するというあなたの仮定はここでは間違っています。
URLからインターネット上のファイルへのFile
を作成する必要がないため、ファイル名を取得できます。
次のように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);