我如何在java webapp中保存和检索服务器上的图像

Myy*_*Myy 10 java mysql tomcat image jsf-2

这里有关于图像的另一个问题(这似乎比我初步预测的更困难)我正在使用JSF 2.0(apache myFaces)开发一个java Web应用程序,我希望这个应用程序能够将图片上传到目的地它将要运行的服务器.我有运行mySQL Db的Windows r2 2008服务器,但我不想将数据存储在数据库中,我宁愿将其存储在服务器中的某个位置,然后将该路径保存为数据库中的字符串.

我被告知这是最好的方法,但我似乎无法找到如何将其保存在服务器上的示例.我在Apache tomcat Server上运行应用程序作为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(); 
Run Code Online (Sandbox Code Playgroud)

而不是把它写到我的C盘我将在服务器上运行它,但我应该在哪里存储图像以便以后检索并显示在xhtml文件中?我希望我能清楚我需要什么,如果我不是,请告诉我,我会尝试以另一种方式解释.

Bal*_*usC 13

而不是把它写到我的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.
Run Code Online (Sandbox Code Playgroud)

至于重新提供文件,最理想的是将上传位置作为单独添加<Context>到Tomcat.例如

<Context docBase="/var/webapp/upload" path="/uploads" />
Run Code Online (Sandbox Code Playgroud)

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

如果您无法控制配置服务器,那么,存储在数据库中或发送到第三方主机(如Amazon S3)是最好的选择.

也可以看看: