上传的图片仅在刷新页面后可用

2024-03-10

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

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

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 个主要原因:

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

  2. 在现实世界的代码中,有些情况下将上传的文件存储在 web 应用程序的部署文件夹中根本不起作用。某些服务器(默认情况下或通过配置)不会将部署的 WAR 文件扩展至本地磁盘文件系统,而是完全扩展至内存中。如果不编辑已部署的 WAR 文件并重新部署它,就无法在内存中创建新文件。

  3. 即使服务器将部署的 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(使用前将#替换为@)

上传的图片仅在刷新页面后可用 的相关文章

随机推荐

  • getElementsByTagName 不起作用?

    在下面的代码中 我通过使用 javascript 动态分配 偶数 类给所有偶数行应用不同的背景颜色 我正在调用 body 标记的 alternamte 函数 onload 起初 我使用 getElementById 来获取表对象 并且我的代
  • FIREBASE 警告:用户回调引发异常。错误:发送后无法设置标头

    我们正在开发一个应用程序 我们使用 Firebase 作为数据库 并使用 Express 作为中间件 后端来路由我们的 RESTful API 该 API 供我们在 Reactjs 中开发的前端使用 下面是我们的 server js 文件的
  • 使用 REST Api,如何在我的类型请求模型中包含“任何类型的 json”?

    我正在使用 NET Framework 和 ASP NET Core 创建 REST Web Api 此 Web API 有一个调用 用于获取请求模型以保存数据 以及一些调用 用于稍后检索数据 大多数数据是我在后端需要的结构化信息 它们被保
  • Java 可重入锁和条件 |生产者完成工作,消费者陷入困境

    一般信息 三个读取器线程从文件中随机读取块 每个块都有一个 ID 然后写入普通的 ArrayList 一旦具有所需 ID 的块被添加到列表中 写入线程就会写入输出文件 因此 我编写了一个 BlockingChunkList 它应该同步 ad
  • 为什么 Firefox 拒绝 ttf 字体

    我有来自网络的 ttf 字体 它们在 ftp 客户端 目录中列为 Windows ttf 字体 我在 Mac OSX 平台上的 Firefox 上使用嵌入字体 但收到以下 Web 控制台错误 17 59 49 201 downloadabl
  • Angularjs 和 jquery 无法以我常规的简单形式工作

    我正在学习 Angularjs 并创建了简单的表单 实际上我是 PHP 开发人员 所以我更喜欢使用 php 作为服务器端脚本语言 我无法将数据提交到服务器 我尝试了很多方法 但是如果我尝试使用标准方法 Angularjs 不起作用 那么这些
  • 如何使用 jQuery 进行重定向? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我使用 HTML 表单提交给 jQuery 验证 然后通过 ajax 将信息发送到 PHP 处理页面 一切都 100 正常工作 除
  • Xcode 7.3 不断在空闲状态下构建

    I noticed that Xcode 7 3 always keep building even in idle time This loads CPU much so sometimes it stops responding Doe
  • 异步构造函数

    我怎样才能最好地处理如下情况 我有一个需要一段时间才能完成的构造函数 var Element function Element name this name name this nucleus this load nucleus name
  • 不在范围内:数据构造函数?

    我是哈斯克尔的新手 我遇到这个问题 Assignment12 hs 5 12 不在范围内 数据构造函数 Suit Assignment12 hs 5 18 不在范围内 数据构造函数 Rank Assignment12 hs 6 11 不在范
  • Java简单计算器

    我用Java编写了这个计算器程序 仅当同时计算两个数字时 此方法才有效 这意味着要获得 1 2 3 的总和 您必须这样做 按 1 按 按 2 按 按 按 3 按 计算结果为 6 但我想对此进行编程 以便我可以通过以下方式获得答案 按 1 按
  • 在 Pi 上通过 python 执行 bluetoothctl 命令

    每次我想在我的 pi 上运行 python 脚本之前 我都会在终端上运行一系列 Bluetoothctl 命令 我想从 pi 自动连接到 BLE 设备 无需任何配对确认或用户交互 以下是每次在运行另一个 python 脚本之前重新启动 pi
  • 事务性与非事务性 msmq

    我不断看到文档 http msdn microsoft com en us library ms702030 VS 85 aspx表示不可能发送到事务范围之外的远程事务 msmq 队列 我发现这很难相信 因为我think我已经这样做了好几个
  • 无法将新元数据附加到捕获的图像

    我正在尝试将我自己的一些字段附加到我捕获的图像中 我似乎能够更改现有的 EXIF 条目 但无法添加新条目 无论是在 EXIF 字典中还是作为单独的字典添加到图像中 当我进行添加时 我可以将它们视为图像数据的一部分 但它们永远不会保存到图像文
  • Acumatica 过滤 PXSelector 具有快速搜索功能

    我有一个自定义 dac 和 pxselector 如下所示 With quick search red bordered search I want to filter with every properties For example w
  • main 的 ret 指令去哪里了

    我在 Programming from ground up 一书中了解了汇编 x86 如何在全球范围内工作 在本书中 每个程序都以退出中断调用结束 然而 在C编译的程序中 我发现程序以ret结尾 这假设有一个地址要弹出 这将导致程序结束 所
  • TYPO3 Extbase如何清空ObjectStorage

    我想在更新对象时 清空 ObjectStorage 它是 TYPO3 4 6 带有 Extbase 扩展 允许您在前端显示 添加 编辑 删除数据集 乍一看一切看起来都不错 我有一个字段引用另一张表 TCA partner gt array
  • Fortran 77 续行[重复]

    这个问题在这里已经有答案了 所以我必须用 fortran77 和 f 文件扩展名编写这个程序 并且我不想使用选项来编译它 我想修复该错误 但由于某种原因 我尝试过的所有操作仍然给我这个错误 我已经包含了代码和错误终端输出 程序 p1 隐式无
  • Android getActivity() 在片段内总是返回 null

    我遇到了一个奇怪的问题 getActivity 方法always在片段内返回 null 我在 onAttach 和 onCreateView 完成运行后调用它 该片段位于包含片段堆栈的 FragmentActivity 内 我向其中添加片段
  • 上传的图片仅在刷新页面后可用

    当我上传图片时 文件保存成功 路径设置成功 但表单提交后上传的图像并没有立即显示 仅当我重新加载页面时 才会显示上传的图像 我正在保存上传的文件 如下所示 InputStream is try File file new File C Do