什么是保存图像的正确方法(文件上传)

时间:2012-12-17 08:18:11

标签: java tomcat web-applications file-upload

我正在尝试将图片保存在我的网络应用目录之外。 我在共享上托管了我的应用程序。所以我有一个根文件夹来部署我的项目。我怎样才能在我的webapp之外创建一个目录,以便我可以上传我的图像。如果我重新部署我的应用程序,那么这些图像不会丢失。

例如。我有根空间,我粘贴了我的所有构建文件夹。如果我重新部署我的应用程序,我希望上传文件夹不会丢失。

fileSystemPath= "/files"; 
 try{                
     File destFile  = new File(fileSystemPath, thempicFileName);
         FileUtils.copyFile(thempic, destFile);
         String path=fileSystemPath+"/"+thempicFileName;  

使用上面的代码,文件夹在D盘中创建(我当前的工作目录),在我的db文件中存储类似/files/smg.png如果我尝试使用来自我的jsp页面的<img src="/files/smg.png"/>然后我没有确定要显示的图像。

项目和文件完全的位置.. 使用上面的代码,我的图片保存在D:\myprojectDir\files,我的项目位置为D:\myprojectDir\projectfolder

这个项目正在STRUTS2中开发

请建议我以哪种方式编写代码,以便我可以在jsp上接收我的图像。

2 个答案:

答案 0 :(得分:0)

您无法直接从浏览器访问您的webapp的任何其他内容(甚至某些文件夹也受到保护)。想象一下,如果可能的话,那就是安全漏洞。

您可以编写一个“代理”servlet / JSP,它从文件系统中读取文件并将其返回给浏览器。您可能需要确保正确访问您的tomcat用户,并在使用时使用selinux进行访问。

但请不要在没有充分理由的情况下执行此操作,并且所有检查都只是访问您打算使用的路径(因此,请检查是否有人通过了../../mySecrectAccountPasswords.txt这样的文件。)< / p>

答案 1 :(得分:0)

您可以将图像存储在可从服务器应用程序访问的任何位置。

你必须打开文件并使用你在jsp中放入的特定servlet将流发送到响应。

这是Spring的一个例子:

            File file = new File(...);
            Resource resource = new FileSystemResource( file );

            HttpHeaders headers = new HttpHeaders();
            headers.setContentType( MediaType.IMAGE_JPEG );

            return new ResponseEntity<Resource>( resource, headers,
                    HttpStatus.OK );

已编辑:您在Google上搜索了大量示例:“将图片流式传输到http响应”。