詳解Java讀取本地文件并顯示在JSP文件中
詳解Java讀取本地文件并顯示在JSP文件中
當(dāng)我們初學(xué)IMG標(biāo)簽時(shí),我們知道通過設(shè)置img標(biāo)簽的src屬性,能夠在頁面中顯示想要展示的圖片。其中src的值,可以是磁盤目錄上的絕對(duì),也可以是項(xiàng)目下的相對(duì)路徑,還可以是網(wǎng)絡(luò)上的圖片路徑。在存取少量圖片的情況下,采用相對(duì)路徑存儲(chǔ)圖片的情況下最方便,也最實(shí)用。但是當(dāng)圖片數(shù)量過多時(shí),這種方式就顯的有些掣肘了。
當(dāng)系統(tǒng)的圖片數(shù)量過多時(shí),如果仍把這些圖片當(dāng)做項(xiàng)目的一部分去發(fā)布,勢(shì)必會(huì)大大延長項(xiàng)目的發(fā)布時(shí)間及更新時(shí)間。對(duì)于某些對(duì)于時(shí)限性要求特別高的系統(tǒng)來說,采用相對(duì)路徑存儲(chǔ)圖片就是不可取的。特別是系統(tǒng)發(fā)布補(bǔ)丁時(shí),只能采用增量的方式去更新系統(tǒng)。如果采用覆蓋的方式發(fā)布系統(tǒng),就可能會(huì)造成系統(tǒng)圖片文件的丟失。
基于以上種種原因,很多系統(tǒng)會(huì)把大量的圖片存在服務(wù)器的固定目錄下,這樣搭建集群環(huán)境時(shí),就能訪問公共的資源,避免對(duì)硬盤空間的浪費(fèi),但是問題也就在這里出現(xiàn)了。我們發(fā)布好的系統(tǒng)訪問磁盤上的固定目錄下的圖片時(shí),出現(xiàn)了沒有權(quán)限訪問的提示。系統(tǒng)為了保證本地安全,不允許直接訪問圖片。
咋一看,上面的問題有的不可思議。但仔細(xì)想想,系統(tǒng)這么做,也確實(shí)有道理的。在服務(wù)器上,部署了很多個(gè)系統(tǒng)應(yīng)用。不可能有一個(gè)系統(tǒng)的訪問權(quán)限,就可以隨隨便便的訪問磁盤上的文件。事實(shí)上,服務(wù)器上的系統(tǒng)是有權(quán)限讀取其它磁盤路徑下的文件,只是沒有辦法讓它顯示而已。
要解決上面的問題,我們可以使用流的方式把圖片讀取出來,然后再輸出顯示到HTML頁面中。
具體的代碼見下面:
<img name="person.personImg" id="personImg" alt="頭像照片" src="${person.personImg}" style="width:160px;height:160px;border:1px solid" /> <button id="btnImg" class="btn btn-primary" type="button" title="上傳圖片" onclick="uploadPersonPic()">上傳圖片</button> <script> $(function() { //讀取頭像照片 if($("#oid").val()!=="") { $("#personImg").attr("src","favccxx/person/loadUserPhoto?externalPerson.oid="+$("#oid").val()+"&Time="+(new Date().getTime())); $("#personImg").css("display",""); $("#btnImg").css("display",""); }else{ $("#personImg").css("display","none"); $("#btnImg").css("display","none"); } } </script>
Java代碼:
@Action(value = "loadUserPhoto", results = { @Result(name = "success", type = "stream", params = { "contentType", "image/jpeg", "inputName", "imageStream" }) }) public String getImage() { if (person.getOid() != null) { // 設(shè)置圖片 try { Person person = personService.findOne("oid", externalPerson.getOid()); FileInputStream is = new FileInputStream(person.getPersonImg()); imageStream = new BufferedInputStream(new FileInputStream(person.getPersonImg())); } catch (Exception e) { } } return SUCCESS; }
以上就是java 讀取本地文件并顯示的實(shí)例,如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
如何開啟控制臺(tái)輸出mybatis執(zhí)行的sql日志問題
這篇文章主要介紹了如何開啟控制臺(tái)輸出mybatis執(zhí)行的sql日志問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09java多線程Thread的實(shí)現(xiàn)方法代碼詳解
這篇文章主要介紹了java多線程Thread的實(shí)現(xiàn)方法代碼詳解,涉及start(),run(),stop(),interrupt(),isInterrupted(),join()和join(long millis)等方法的介紹,具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-11-11Mybatis Plus代碼生成器(時(shí)間管理大師)
這篇文章主要介紹了Mybatis Plus代碼生成器(時(shí)間管理大師)的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07SpringBoot中多個(gè)實(shí)現(xiàn)的接口正確注入的六種方式
在SpringBoot中,正確注入多個(gè)接口實(shí)現(xiàn)包括使用@Autowired和@Qualifier、@Resource注解、構(gòu)造方法注入、@Primary注解、Java配置類以及將所有實(shí)現(xiàn)注入到List或Map中,感興趣的可以了解一下2024-10-10IDEA如何配置本地tomcat啟動(dòng)項(xiàng)目
這篇文章主要介紹了IDEA如何配置本地tomcat啟動(dòng)項(xiàng)目問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12spring聲明式事務(wù)@Transactional開發(fā)常犯的幾個(gè)錯(cuò)誤及最新解決方案
使用聲明式事務(wù)@Transactional進(jìn)行事務(wù)一致性的管理,在開發(fā)過程中,發(fā)現(xiàn)很多開發(fā)同學(xué)都用錯(cuò)了spring聲明式事務(wù)@Transactional或使用不規(guī)范,導(dǎo)致出現(xiàn)各種事務(wù)問題,這篇文章主要介紹了spring聲明式事務(wù)@Transactional開發(fā)常犯的幾個(gè)錯(cuò)誤及解決辦法,需要的朋友可以參考下2024-02-02