2

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

例如,我可以通过以下方式访问图像:

本地主机:8080/classpath/images/test.jpg

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

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

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

在此先感谢,非常感谢:)

4

2 回答 2

3

要从 toserve-directory 读取资源,您需要执行如下调用

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"

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

于 2013-01-20T14:56:17.307 回答
0

你有没有尝试过:

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

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

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

于 2012-09-27T03:05:55.527 回答