当我上传图片时,文件保存成功,路径设置成功。但表单提交后上传的图像并没有立即显示。仅当我重新加载页面时,才会显示上传的图像。
我正在保存上传的文件,如下所示:
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 的项目文件夹,并且您的意图似乎是将文件保存在 web 应用程序的部署文件夹中。这是一个坏主意,但由于以下 3 个主要原因:
IDE 项目文件夹中的更改不会立即反映在服务器的工作文件夹中。 IDE 中有一种后台作业,负责将服务器的工作文件夹与最新更新同步(这在 IDE 术语中称为“发布”)。这是您所看到的问题的主要原因。
在现实世界的代码中,有些情况下将上传的文件存储在 web 应用程序的部署文件夹中根本不起作用。某些服务器(默认情况下或通过配置)不会将部署的 WAR 文件扩展至本地磁盘文件系统,而是完全扩展至内存中。如果不编辑已部署的 WAR 文件并重新部署它,就无法在内存中创建新文件。
即使服务器将部署的 WAR 文件扩展到本地磁盘文件系统,所有新创建的文件在重新部署甚至简单的重新启动时都会丢失,因为这些新文件不是原始 WAR 文件的一部分。
您需要将其写入项目/部署文件夹之外的固定路径。例如,/var/webapp/uploads
。然后,要让它由您的 Web 应用程序提供服务,只需将其作为新的 Web 应用程序上下文添加到服务器即可。
根据您之前的问题,我知道您正在使用 Glassfish 3.1。在这个服务器中,它被称为“虚拟主机”。您可以在管理控制台的服务器级别进行配置:http://本地主机:4848 http://localhost:4848 > 配置 > HTTP 服务 > 虚拟服务器,或者在 web 应用程序级别添加以下行到/WEB-INF/glassfish-web.xml
(您的 IDE 应该自动生成一个文件;请注意,该文件是在 Glassfish 3.1 之前调用的sun-web.xml
,所以如果您看到引用它的手册/博客/教程,是的,它是完全相同的文件):
<property name="alternatedocroot_1" value="from=/uploads/* dir=/var/webapp" />
不管怎样,你应该能够使用http://localhost:8080/contextname/uploads/ http://localhost:8080/contextname/uploads/* 提供来自 by 上传的图像<img>
通常的方式。
也可以看看:
- 如何使用JSP/Servlet上传文件到服务器? https://stackoverflow.com/questions/2422468/how-to-upload-files-to-server-using-jsp-servlet/
-
在 servlet 应用程序中保存上传文件的推荐方法 https://stackoverflow.com/questions/18664579/recommended-way-to-save-files-uploaded-to-a-tomcat-servlet/(包含Tomcat配置示例)
-
在servlet中读取/写入文本文件,该文件应该存储在JBoss中的哪里? https://stackoverflow.com/questions/9468045/reading-writing-a-text-file-in-a-servlet-where-should-this-file-be-stored-in-jb/(包含JBoss配置示例)
- 在 Java Web 应用程序中从应用程序服务器外部提供静态数据的最简单方法 https://stackoverflow.com/questions/1812244/simplest-way-to-serve-static-data-from-outside-the-application-server-in-a-java/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)