我正在尝试为存储在Lifts resources / toserve目录下的文件提供StreamingResponse
,以便授权不同用户访问。
我可以访问图像,例如:
本地主机:8080 /类路径/图像/ test.jpg放在
但是当我尝试使用scala实际读取文件时,我不断发现文件未找到异常:
val file = new java.io.FileInputStream("/classpath/images/test.jpg")
是否有一种特定的方法来读取位于类路径上的文件?
提前致谢,非常感谢:)
答案 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