Im próbuje uzyskać dostęp do przykładową/Web folder (patrz poniżej na zdjęciu) w JSF udało fasoli ale cant wydają się znaleźć sposób na toOdzyskaj ścieżkę web app główny w JSF Managed Bean
thx
Im próbuje uzyskać dostęp do przykładową/Web folder (patrz poniżej na zdjęciu) w JSF udało fasoli ale cant wydają się znaleźć sposób na toOdzyskaj ścieżkę web app główny w JSF Managed Bean
thx
Jeśli chcesz dostać go jako File
z jakiegoś powodu, to trzeba ExternalContext#getRealPath()
. To konwertuje względną ścieżkę do bezwzględnego systemu plików na dysku. Ponieważ trzeba Katalog główny WWW, tylko przechodzą w /
:
String absoluteWebPath = externalContext.getRealPath("/");
File webRoot = new File(absoluteWebPath);
// ...
niezwiązane do konkretnego problemu, niezależnie funkcjonalny wymóg miałeś na myśli, dla których myślałeś, że mając absolutną lokalnego dysku Ścieżka do systemu plików do folderu internetowego jest właściwym rozwiązaniem, zdecydowanie należy rozwiązać inaczej. I rzeczywiście, jak na swój komentarz na drugiej odpowiedzi,
ponieważ Im próbuje przesłać jakiś plik w katalogu i przy użyciu ścieżki względnej
idziesz złą drogą. Nie przechowuj tam przesłanych plików, jeśli zamierzasz je przechowywać dłużej niż okres istnienia wdrożenia webapp. Za każdym razem, gdy przenosisz aplikację webapp (i na niektóre konfiguracje serwerów nawet po ponownym uruchomieniu serwera), przesłane pliki zostaną całkowicie utracone, po prostu dlatego, że nie są zawarte jako część oryginalnego pliku WAR. Co więcej, niektóre konfiguracje ciężkich serwerów nie rozszerzają w ogóle WAR na dysku, ale w pamięci, getRealPath()
będzie zawsze zwracać null
.
Zamiast przechowywać go w ścieżce systemowej pliku dyskowego naprawiony poza folderem wdrażania serwera. Dodaj tę ścieżkę jako nowy kontekst serwera lub docroot, aby był dostępny w innej (wirtualnej) ścieżce kontekstu. Lub napisz aplet, który pobiera z dysku InputStream
i zapisuje go na OutputStream
odpowiedzi. Zobacz także te powiązane odpowiedź: Uploaded image only available after refreshing the page
Spróbuj
FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()
dla budowy względny adres URL do zasobów aplikacji.
Jeśli chcesz prawdziwą ścieżkę ...
ServletContext ctx = (ServletContext) FacesContext.getCurrentInstance()
.getExternalContext().getContext();
String realPath = ctx.getRealPath("/");
ładne, dzięki ale czy to możliwe, aby uzyskać bezwzględną ścieżkę, ponieważ Im próbuje przesłać jakiś plik w katalogu i przy użyciu względny ścieżka Im get java.io.FileNotFoundException: \ example (Odmowa dostępu) – hari
Dodałem dla 'realPath' –
Spróbuj:
String relativePath="/resources/temp/";
String absolutePath= FacesContext.getCurrentInstance.getExternalContext().getRealPath(relativePath);
File file = new File(absolutePath);
dostać prawdziwą drogę.
Utwórz plik tmp w zasobach/temp /, aby uniknąć wyjątków.
Chciałam tylko podziękować Balus C.Kod Java z JSP w serwerze Tomcat/Tomee I dodaje kod, który działa:
private Boolean SaveUserItemImage(Part ui, String bid) throws IOException {
Boolean fileCreate = false;
OutputStream out = null;
InputStream filecontent = null;
ExternalContext ctx = context().getExternalContext();
String absoluteWebPath = ctx.getRealPath("/");
String resource_path = absoluteWebPath + "\\resources\\";
String image_path = resource_path + "\\" + this.itemType + "_images\\";
String buildFileName = image_path + bid + "_" + getFileName(ui);
File files = null;
try {
files = new File(buildFileName);
fileCreate = true;
} catch (Exception ex) {
System.out.println("Error in Creating New File");
Logger.getLogger(ItemBean.class.getName()).log(Level.SEVERE, null, ex);
}
if (fileCreate == true) {
if (files.exists()) {
/// User may be using same image file name but has been editted
files.delete();
}
try {
out = new FileOutputStream(files);
filecontent = ui.getInputStream();
int read = 0;
final byte[] bytes = new byte[1024];
while ((read = filecontent.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
fileCreate = true;
} catch (FileNotFoundException fne) {
fileCreate = false;
Logger.getLogger(ItemBean.class.getName()).log(Level.SEVERE, "SaveUserItemImage", fne);
} finally {
if (out != null) {
out.close();
}
if (filecontent != null) {
filecontent.close();
}
files = null;
}
}
return fileCreate;
}
dzięki za odpowiedź, Zrobię trochę więcej na przechowywanie zdjęć i wróci, jeśli mam jakieś pytanie – hari