2010-05-16 31 views
11

Tôi nhận được ngoại lệ: "Lược đồ URI không phải là tệp"Sơ đồ URI không phải là "tệp"

Điều tôi đang làm là cố gắng lấy tên tệp và sau đó lưu tệp đó (từ máy chủ khác) lên máy tính/máy chủ của tôi từ bên trong một servlet.

Tôi có một chuỗi gọi là "url", từ bản ở đây là mã của tôi:

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)); 
} 

Dòng gây ra lỗi là một trong những điều này:

File fileFromUri = new File(fileUri);     

Tôi đã thêm phần còn lại của để bạn có thể thấy những gì tôi đang cố gắng làm.

Trả lời

25

Sơ đồ "URI" là nội dung xuất hiện trước ":", ví dụ "http" trong "http://stackoverflow.com".

Thông báo lỗi cho bạn biết rằng new File(fileUri) chỉ hoạt động trên "tệp:" URI (những tên đề cập đến tên đường dẫn trên hệ thống hiện tại) chứ không phải các lược đồ khác như "http".

Về cơ bản, URI "tệp:" là một cách khác để chỉ định tên đường dẫn cho lớp File. Nó không phải là một cách kỳ diệu để nói File để sử dụng http để tìm nạp một tệp từ web.

3

Giả định của bạn để tạo File từ URL không đúng ở đây.

Bạn chỉ không cần tạo một File từ URL vào tệp trong Internet, để bạn lấy tên tệp.

Bạn chỉ có thể làm điều này với phân tích các URL như thế:

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); 
+0

Cảm ơn này cũng rất hữu ích. – Ankur

Các vấn đề liên quan