Scala Lift - 从“/ resources / to serve”中读取文件

时间:2012-09-24 22:24:10

标签: java file scala lift

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

我可以访问图像,例如:

本地主机:8080 /类路径/图像/ test.jpg放在

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

val file = new java.io.FileInputStream("/classpath/images/test.jpg")

是否有一种特定的方法来读取位于类路径上的文件?

提前致谢,非常感谢:)

2 个答案:

答案 0 :(得分:3)

要从toserve目录中读取资源,您需要进行类似

的调用
LiftRules.getResource("/toserve/images/test.jpg")

如果您尝试使用'classpath'而不是'toserve',您将收到一个空盒子。

默认情况下,Lift使用两个不同的路径前缀来以编程方式在服务器中或通过HTML中的链接元素来查找资源。对于前者,您将使用'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"

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

答案 1 :(得分:0)

你试过了吗?

LiftRules.getResource("/classpath/images/test.jpg")

这应该将java.net.URL返回到您要查找的项目。

这可能还有关于您要执行的操作的更多信息:http://exploring.liftweb.net/master/index-9.html#lst:streaming-download