2015-05-27 108 views

回答

0

您可以從事件處理程序

的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中。

訪問本地文件系統提出了許多問題,包括交易,併發性和安全性,並且通常應該避免

+0

謝謝您的回答蘭斯!是的,訪問本地文件是一個壞主意,但我不知道如何使用blob類型。我使用的是Postgres,有人說Postgres blob與mysql blob不同。 – user2732201

+0

這很簡單,@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) –

+0

是的,我已閱讀該鏈接,並得到了一些明亮的燈光來解決這個問題:D – user2732201

相關問題