загрузка файла в корневой каталог с помощью jsf Primefaces

Я пытаюсь сохранить логотип клиента в "src / main / webapp / clientImage / clientcode", каталог clientcode будет создан на основе клиента с разным номером 2.
Например, если код клиента - TEST, то полный путь будет выглядеть как «src / main / webapp / clientImage / TEST», и когда мы загружаем изображение клиента, логотип клиента будет находиться в каталоге «TEST».
Итак, после загрузки логотипа клиента (предположим, имя изображения - "test.jpeg", тогда полный каталог будет "src / main / webapp / clientImage / TEST / test.jpeg". Код для загрузки логотипа клиента: :: < / сильный>

`public boolean upload(UploadedFile uploadFile) {
String LOGO_PATH= "/clientImage/";
String fileName = uploadFile.getFileName();
String realPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath(LOGO_PATH + selectedClient.getClientCode());
File f = new File(realPath);
if (!f.exists()) {
        f.mkdirs();
        logger.debug("Directory created : {}", f.getName());
}
try {
new UserUtils().copyFile(fileName, uploadFile.getInputstream(), realPath);
            selectedClient.setLogo(fileName);
saveClient();
FacesMessage msg = new FacesMessage("Success! ", uploadFile.getFileName() + " set as logo.");
FacesContext.getCurrentInstance().addMessage(null, msg);
return true;
} catch (IOException e) {
    logger.error("{}", e);
    return false;
}
}

`

Проблема: Моя проблема в том, что когда я загружаю логотип для ТЕСТ-клиента, я получаю реальный путь "C: \ Users \ narendra \ tls_workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp0 \ wtpwebapps \ iclock \ clientImage \ ТЕСТ "

где realPath должен быть "src / main / webapp / clientImage / TEST / test.jpeg", а логотип должен быть сохранен в каталоге TEST, но логотип даже не попадает в этот каталог


person MostlyJava    schedule 28.04.2017    source источник


Ответы (1)


Вы не запускаете сам источник. Ваши исходные файлы компилируются в классы, а затем ваши классы и ресурсы упаковываются в архив веб-приложений - файл WAR. Итак, ваш realPath не находится в src, он везде, где развернута ваша WAR. В вашем случае он находится в файлах tmp Eclipse, потому что вы запускаете его из Eclipse.

Идея загрузки файлов в исходный каталог бессмысленна, потому что ваш исходный каталог не будет развернут на сервере - упакованный WAR будет. Если вы продаете свое веб-приложение, вы, вероятно, не отправите свой источник своему клиенту - вы отправите им исполняемый файл, то есть файл WAR.

Вы также не должны хранить пользовательские данные в своей WAR. Ваша WAR должна быть неизменной во время ее выполнения. Вместо этого вы должны запросить у своего сервера или Java каталог Temp или какой-либо каталог данных. Например. Серверы Wildfly имеют следующие системные свойства:

jboss.server.data.dir - каталог, который сервер будет использовать для постоянного хранения файлов данных jboss.server.temp.dir - каталог, который сервер будет использовать для временного хранения файлов

person Vsevolod Golovanov    schedule 28.04.2017