0
我使用的是Tapestry 5.3和jetty 9.我想從文件系統顯示圖像(例如:「/ opt/images /」)是否可以從文件系統中的外部文件夾創建資源?任何幫助將不勝感激。由於前〜Tapestry從文件系統加載圖像資產
我使用的是Tapestry 5.3和jetty 9.我想從文件系統顯示圖像(例如:「/ opt/images /」)是否可以從文件系統中的外部文件夾創建資源?任何幫助將不勝感激。由於前〜Tapestry從文件系統加載圖像資產
您可以從事件處理程序
的Java
@Inject
private ComponentResources resources;
public StreamResponse onExternalImage(final String someArg) {
return new StreamResponse() {
public String getContentType() {
return "image/jpeg";
}
public InputStream getStream() {
// todo implement
// be very careful you don't allow a hacker to
// access your entire file system using ../../ etc
}
public void prepareResponse(Response response) { }
};
}
public Link getExternalImageLink(String someArg) {
return resources.createEventLink("externalImage", someArg);
}
TML
<img src="${getExternalImageLink('foo')}" />
<img src="${getExternalImageLink('bar')}" />
注意,使用本地文件系統通常是一個壞主意返回StreamResponse。如果文件是靜態的,最好從類路徑中獲取。如果該文件不是靜態的,則應考慮將其存儲在數據庫/ Blobstore中。
訪問本地文件系統提出了許多問題,包括交易,併發性和安全性,並且通常應該避免
謝謝您的回答蘭斯!是的,訪問本地文件是一個壞主意,但我不知道如何使用blob類型。我使用的是Postgres,有人說Postgres blob與mysql blob不同。 – user2732201
這很簡單,@see [PreparedStatement.setBlob(column,InputStream)](http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#setBlob(int,%20java .io.InputStream))和[ResultSet.getBinaryStream(column)](http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getBinaryStream(java.lang.String) )和[this](https://wiki.postgresql.org/wiki/BinaryFilesInDB) –
是的,我已閱讀該鏈接,並得到了一些明亮的燈光來解決這個問題:D – user2732201