当前位置: 首页 > 面试题库 >

我如何在Java WebApp中的服务器上保存和检索图像[重复]

傅阿苏
2023-03-14
问题内容

这个问题已经在这里有了答案

如何在JSF中保存上传的文件 (2个答案)

4年前关闭。

这是有关图像的另一个问题(似乎比我最初预计的要困难得多),我正在使用JSF 2.0(apache myFaces)开发Java
Web应用程序,我希望该应用程序能够将图片上传到目标位置将要在其上运行的服务器。我有一台运行mySQL Db的Windows r2 2008
Server,但是我不想将映像存储在数据库中,而是将其存储在服务器中的某个位置,然后将路径另存为字符串在数据库中。

有人告诉我这是最好的方法,但是我似乎找不到如何将其保存在服务器上的示例。我在Apache
Tomcat服务器上将应用程序作为WAR文件运行。所以我不知道我是否必须将文件保存到服务器驱动器上的路径(即C:\
images)或项目本身中的特殊文件夹(在Java,html文件中),所有帮助都将不胜感激。我完全迷失了自己,整整一天都被困住,试图找出答案。

我用来将图像上传到java类的代码是这样(由CodyS提供):

InputStream is = uploadedFile.getInputStream();  
byte[] buffer = new byte[(int) uploadedFile.getSize()];
is.read(buffer); 
File f = new File("C:\\temp\\" + this.patient.getPk() + ".jpeg");   
f.createNewFile();  
FileOutputStream fos = new FileOutputStream(f);  
fos.write(buffer);  //This is where I write it to the C Drive
fos.close();
is.close();

而不是将其写入C驱动器,而是要在服务器上运行它,但是应将图像存储在哪里以供以后检索并显示在xhtml文件中?我希望我对自己的需求很清楚,如果我不需要,请告诉我,我将尝试用另一种方式进行解释。


问题答案:

而不是将其写入C驱动器,而是要在服务器上运行它,但是应将图像存储在哪里以供以后检索并显示在xhtml文件中?

这取决于您对服务器的配置有多少控制权。理想的做法是在Tomcat
webapps文件夹外部配置固定路径。例如,/var/webapp/upload。您可以将此路径设置为VM参数或环境变量,以便您的webapp可以以编程方式检索它,而无需更改代码。

例如,当指定为VM参数时-Dupload.location=/var/webapp/upload,您可以按照以下步骤完成上传:

Path folder = Paths.get(System.getProperty("upload.location"));
String filename = FilenameUtils.getBaseName(uploadedFile.getName()); 
String extension = FilenameUtils.getExtension(uploadedFile.getName());
Path file = Files.createTempFile(folder, filename + "-", "." + extension);

try (InputStream input = uploadedFile.getInputStream()) {
    Files.copy(input, file, StandardCopyOption.REPLACE_EXISTING);
}

String uploadedFileName = file.getFileName().toString();
// Now store it in DB.

至于将文件送回,最理想的是将上传位置添加<Context>为Tomcat 的单独位置。例如

<Context docBase="/var/webapp/upload" path="/uploads" />

这样,您可以通过http://example.com/uploads/foo-123456.ext直接访问它

如果您对配置服务器没有任何控制权,那么最好将其存储在html" target="_blank">数据库中或发送给第三方主机(例如Amazon S3)。

也可以看看:

  • 如何在File类中提供相对路径以上传任何文件?
  • 可靠的数据服务


 类似资料:
  • 我正在进行一个生成艺术项目,我希望允许用户保存从一个算法得到的图像。大意是: 使用生成算法在HTML5画布上创建图像 完成映像后,允许用户将画布作为映像文件保存到服务器 允许用户下载图像或将其添加到使用该算法生成的图像库中。 然而,我却被卡在了第二步上。经过谷歌的一番帮助,我找到了这篇博文,似乎正是我想要的: 这导致了JavaScript代码: 和相应的PHP(testsave.PHP): 但这似

  • 我试图用一个标志图像存储一些细节,因为我已经创建了一个方法,并在我的本地系统中使用它,它似乎在那里工作得很好。但是当我把我的代码上传到云上的时候。我正在使用Heroku来承载我的web应用程序,它给了我一个错误。

  • 问题内容: 我要上传图像并将其保存在服务器中。我上传了图像并获得了预览,但是我被困在将图像发送到服务器上。我想使用角度服务将此图像发送到服务器。 这是HTML代码 这是指令 问题答案: 假设您在后端中期望Multipart,这是一段对我有用的代码。 这是一个jsfiddle。 请注意 以下部分: 是一些Angular魔术,为了使$ http解析FormData并找到正确的内容类型,等等。

  • 我正在努力使用JavaScript和PHP将我的画布图像保存到服务器。我已经尝试了JS和PHP的多个例子,但总是失败。关于如何将图像数据发送到PHP脚本(bas64、blob、FormData),有相互矛盾的建议,我不确定如何最好地与JS通信。目前,零字节的PNG文件被保存到服务器,我不知道为什么。我想在服务器上将生成的画布保存为PNG,并在成功时在JS中执行命令。如何最好地处理它? JS: PH

  • 问题内容: 使用javascript有没有办法判断服务器上资源是否可用?例如我有图像1.jpg-5.jpg加载到html页面中。我想每分钟或每分钟调用一个JavaScript函数,以便大致执行以下临时代码… 有什么想法吗?谢谢! 问题答案: 您可以使用类似: 显然,您可以使用jQuery / like执行您的HTTP请求。

  • 在以下片段中,是blob键吗?