-1

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

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

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

使用上面的代码,在 D 驱动器(我当前的工作目录)中创建了一个文件夹,并且在我的 db 文件中存储了类似的内容/files/smg.png如果我尝试使用<img src="/files/smg.png"/>我的 jsp 页面访问该图像,那么我将无法显示该图像。

项目和文件的确切位置.. 使用上面的代码,我的图像保存在D:\myprojectDir\files其中,我的项目位置是D:\myprojectDir\projectfolder

该项目正在STRUTS2中开发

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

4

2 回答 2

0

您不能从浏览器直接访问您的 web 应用程序的其他任何内容(甚至有些文件夹受到保护)。想象一下,如果可以的话,会出现什么样的安全漏洞。

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

但是请不要在没有充分理由的情况下这样做,并且所有检查您只访问您打算访问的路径(因此,请检查没有人向您传递类似的文件../../mySecrectAccountPasswords.txt)。

于 2012-12-17T08:23:38.900 回答
0

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

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

这是 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 响应”。

于 2012-12-17T08:26:30.523 回答