我正在编写上传和下载功能,我尝试使用这两种方法来写入或读取同一文件夹,我遇到了getResourceAsStream
的一些问题。 (该软件在glassfish上运行)
上传:上传到此文件夹的方法:/home/phamtn8/glassfishv3/glassfish/domains/domain1/applications/Documents/Documents-war_war/drawings/Liandro.jpg
- >工作很棒
下载:stream = the above path
input = this.getClass().getResourceAsStream(stream);
//返回null
包含这些上传和下载方法的类文件的位置位于:
/home/phamtn8/glassfishv3/glassfish/domains/domain1/applications/Documents/Documents-war_war/WEB-INF/classes/org/xdrawing/web
。如果我将jpg
文件放在此处,则getResourceAsStream
可以正常工作。
注意:this.getClass.getName()
返回org.xdrawing.web.FileName
请帮助!!!
答案 0 :(得分:7)
getResourceAsStream(..)
处理来自类路径根的路径。而你的似乎是机器的根源。所以请改用new FileInpuStream(fullPath)
。
实际上,还有另一个getResourceAsStream
方法属于ServletContext
。它处理来自Web应用程序根目录的路径,更适合Web应用程序。 (您的网络应用根目录为Documents-war_war/
)
但文件上传和下载的最佳做法是将它们存储在与您的Web应用程序完全不同的位置 - 比如/home/appname/uploads
,以便您可以部署和取消部署Web应用程序而不会丢失任何数据。您只需要一个配置选项(例如<context-param>
中的web.xml
)指向上传的绝对位置,并分别使用FileInputStream
方法(或OutputStream
)