Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 上载的图像仅在刷新页面后可用_Jsf_Jakarta Ee_Servlets_File Upload_Refresh - Fatal编程技术网

Jsf 上载的图像仅在刷新页面后可用

Jsf 上载的图像仅在刷新页面后可用,jsf,jakarta-ee,servlets,file-upload,refresh,Jsf,Jakarta Ee,Servlets,File Upload,Refresh,上传图片时,文件成功保存,路径设置成功。但表单提交后,上传的图像不会立即显示。只有在重新加载页面时,才会显示上载的图像 我正在保存上传的文件,如下所示: InputStream is; try { File file = new File("C:\\****\\*****\\Documents\\NetBeansProjects\\EventsCalendary\\web\\resources\\images\\uploadPhoto.png"); is = event.getF

上传图片时,文件成功保存,路径设置成功。但表单提交后,上传的图像不会立即显示。只有在重新加载页面时,才会显示上载的图像

我正在保存上传的文件,如下所示:

InputStream is;
try {
    File file = new File("C:\\****\\*****\\Documents\\NetBeansProjects\\EventsCalendary\\web\\resources\\images\\uploadPhoto.png");
    is = event.getFile().getInputstream();
    OutputStream os = new FileOutputStream(file);
    setUserPhoto("\\EventsCalendary\\resources\\images\\"+file.getName());   
    byte buf[] = new byte[1024];
    int len;
    while ((len = is.read(buf)) > 0) {
        os.write(buf, 0, len);
    }
    os.close();
    is.close();

} catch (IOException ex) {
    System.out.println(ex.getStackTrace());
}

为什么只有在重新加载页面后才会显示上载的图像?我如何解决此问题?

您将文件直接写入IDE的项目文件夹,并且您的意图似乎是将文件保存在webapp的部署文件夹中。这是一个不好的主意,也是因为以下三个主要原因:

IDE项目文件夹中的更改不会立即反映在服务器的工作文件夹中。IDE中有一种后台作业,负责服务器的工作文件夹与上次更新同步。这在IDE术语中称为发布。这是您看到的问题的主要原因

在真实代码中,在某些情况下,将上载的文件存储在webapp的deploy文件夹中根本不起作用。某些服务器在默认情况下或根据配置不会将部署的WAR文件扩展到本地磁盘文件系统,而是完全在内存中。如果不编辑已部署的WAR文件并重新部署它,就无法在内存中创建新文件

即使服务器将已部署的WAR文件扩展到本地磁盘文件系统中,所有新创建的文件都会在重新部署甚至简单的重新启动时丢失,因为这些新文件不是原始WAR文件的一部分

您需要将其写入project/deploy文件夹之外的固定路径。例如,/var/webapp/uploads。然后,要让您的webapp为其提供服务,只需将其作为新的web应用程序上下文添加到服务器

根据您之前的问题,我知道您正在使用Glassfish 3.1。在这个服务器中,它被称为虚拟主机。您可以在管理控制台的>配置>HTTP服务>虚拟服务器的服务器级配置它,或者在webapp级配置它,方法是将以下行添加到/WEB-INF/glassfish-WEB.xml中,您的IDE应该自动生成一行;请注意,此文件在名为sun-web.xml的Glassfish 3.1之前,因此如果您看到手册/博客/教程引用它,那么它是完全相同的文件:

无论哪种方式,您都应该能够使用*以通常的方式为这些上传的图像提供服务

另见: 包含一个Tomcat配置示例 包含JBoss配置示例
问题不在于如何上传图像,而在于如何处理和显示上传的图像。所以,请显示代码,而不是你如何上传图像。我编辑了问题,并把代码。谢谢!它现在似乎工作得很好,但是您提供的代码有一个更正,而不是因为from路径将被添加到dir路径。再次感谢。啊,对了。我修正了答案中的例子,谢谢你的反馈。