0

我正在尝试将客户端徽标存储到“src/main/webapp/clientImage/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;
}
}

`

问题:: 我的问题是当我为 TEST 客户端上传徽标时,我得到的 realPath 是“C:\Users\narendra\tls_workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\iclock \clientImage\TEST"

其中 realPath 应该是“src/main/webapp/clientImage/TEST/test.jpeg”并且徽标应该存储到 TEST 目录中,但徽标甚至没有进入该目录

4

1 回答 1

0

您没有运行源本身。您的源文件被编译成类,然后您的类和资源被打包成一个 Web 应用程序存档 - 一个 WAR 文件。所以你的 realPath 不在 src 中,它在你的 WAR 部署的地方。在您的情况下,它在 Eclipse 的 tmp 文件中,因为您是从 Eclipse 运行它的。

将文件上传到源目录的想法是荒谬的,因为您的源目录不会部署到服务器 - 打包的 WAR 会。如果您出售您的 Web 应用程序,您可能不会将您的源代码发送给您的客户——您将向他们发送一个可执行文件,即一个 WAR 文件。

您也不应该将用户数据保存在您的 WAR 中。您的 WAR 在其运行时应该是不可变的。相反,您应该向服务器或 Java 询问 Temp 目录或某种数据目录。例如 Wildfly 服务器具有以下系统属性:

jboss.server.data.dir - 服务器将用于持久数据文件存储的目录 jboss.server.temp.dir - 服务器将用于临时文件存储的目录

于 2017-04-28T17:34:44.110 回答