Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 保存图像(文件上传)的正确方法是什么_Java_Tomcat_Web Applications_File Upload - Fatal编程技术网

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

Java 保存图像(文件上传)的正确方法是什么,java,tomcat,web-applications,file-upload,Java,Tomcat,Web Applications,File Upload,我正在尝试将图像保存到我的web应用程序目录之外。 我已经在共享服务器上托管了我的应用程序。所以我得到了一个根文件夹来部署我的项目。我怎样才能在我的webapp之外建立一个目录,这样我就可以上传我的图片了。如果我重新部署我的应用程序,那么这些图像将不会丢失 我得到了根空间,并将我所有的构建文件夹粘贴在上面。如果我重新部署我的应用程序,我希望上传文件夹不会丢失 fileSystemPath= "/files"; try{ File destFile

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

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

fileSystemPath= "/files"; 
 try{                
     File destFile  = new File(fileSystemPath, thempicFileName);
         FileUtils.copyFile(thempic, destFile);
         String path=fileSystemPath+"/"+thempicFileName;  
使用上面的代码,在D驱动器(我当前的工作目录)中创建一个文件夹,在我的db文件中像
/files/smg.png
一样存储,如果我试图从jsp页面使用
访问该图像,那么我将无法显示该图像

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

该项目正在STRUTS2中开发


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

您无法从浏览器直接访问您的Web应用程序(甚至有些文件夹受到保护)。想象一下,如果你可以的话,它会是一个安全漏洞

不过,您可以编写一个“代理”servlet/JSP,从文件系统读取文件并将其返回到浏览器。您可能需要确保正确访问tomcat用户,如果您正在使用它,请使用selinux为其提供访问权限


但是,请不要在没有充分理由和所有检查的情况下这样做,因为您只访问了您想要访问的路径(因此,请检查没有人向您传递像
。/../mysecretaccountpasswords.txt
)。

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

您必须打开文件并使用一个特殊的servlet将流发送到响应,该servlet包含您放在jsp中的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 );
File File=新文件(…);
资源资源=新文件系统资源(文件);
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.IMAGE\u JPEG);
返回新的响应属性(资源、标题、,
HttpStatus.OK);

编辑:您在Google中搜索了很多示例:“将图像流式传输到http响应”。

然后您在Google中搜索了很多示例:“将图像流式传输到http响应”。@francadaval这正是我的问题,您想打开此文件夹进行http访问吗?您必须知道jsp不能访问您的系统文件或文件夹。jsp为web浏览器设置URL(),以向web服务器请求图像。所以,或者你把图像放在WebContent(静态图像)中,或者你可以像我在回答中说的那样制作。@francadaval我只想把我的图像放在任何地方,这样如果我重新部署我的项目,它就不应该被删除,我可以在任何jsp页面中显示这些图像。怎么做?@francadaval这是你说的吗