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")

「toserve」の代わりに「classpath」を使用しようとすると、空のボックスが表示されます。

デフォルトでは、Lift は 2 つの異なるパス プレフィックスを使用して、サーバー内でプログラムによって、または 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 に答える