Java Scala Lift-从“中读取文件”/资源/服务”;

Java Scala Lift-从“中读取文件”/资源/服务”;,java,file,scala,lift,Java,File,Scala,Lift,我试图为存储在Lifts resources/toserve目录下的文件提供一个StreamingResponse,以便授权不同用户的访问 我可以访问图像,例如: localhost:8080/classpath/images/test.jpg 但是,当我尝试使用scala实际读取文件时,我会不断得到“未找到文件”异常: val file = new java.io.FileInputStream("/classpath/images/test.jpg") 是否有特定的方法读取位于类路径上的文

我试图为存储在Lifts resources/toserve目录下的文件提供一个
StreamingResponse
,以便授权不同用户的访问

我可以访问图像,例如:

localhost:8080/classpath/images/test.jpg

但是,当我尝试使用scala实际读取文件时,我会不断得到“未找到文件”异常:

val file = new java.io.FileInputStream("/classpath/images/test.jpg")
是否有特定的方法读取位于类路径上的文件

提前感谢,非常感谢:)

您是否尝试过:

LiftRules.getResource("/classpath/images/test.jpg")
这将返回一个java.net.URL到您正在查找的项目


这可能还有关于您要做什么的更多信息:

要从toserve目录中读取资源,您需要执行如下调用

LiftRules.getResource("/toserve/images/test.jpg")
如果您尝试使用“classpath”而不是“toserve”,您将收到一个空框

默认情况下,Lift使用两个不同的路径前缀在服务器中以编程方式或通过HTML中的link元素定位资源。对于前者,您将使用“toserve”-前缀,对于后者,将使用“classpath”-前缀

此行为在对象net.liftweb.http.LiftRules和net.liftweb.http.ResourceServer中指定。特别是,您可以在那里指定(即替换)到资源的路径。有关守则如下:

/** (from net.liftweb.http.ResourceServer)
 * The base package for serving resources.  This way, resource names can't be spoofed
 */
var baseResourceLocation = "toserve" 
您可能还希望查看LiftRules中的以下方法,该方法允许您重新定义用于通过服务器服务资源的名称:

/** (from net.liftweb.http.LiftRules)
 * The path to handle served resources
 */
@volatile var resourceServerPath = "classpath"

如果您希望使用相同的前缀来引用这两种资源,您可以使用这些设置中的一种(或两种)来实现您的目的。

以防现在仍有人使用lift。。。如果您希望/classpath/为您自己的资源提供服务,请不要忘记通过
ResourceServer.AllowedPath