java實(shí)現(xiàn)圖片的上傳與展示實(shí)例代碼
前言
在很多的網(wǎng)站都可以實(shí)現(xiàn)上傳頭像,可以選擇自己喜歡的圖片做頭像,從本地上傳,下次登錄時(shí)可以直接顯示出已經(jīng)上傳的頭像,那么這個(gè)是如何實(shí)現(xiàn)的呢?下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧
一、注意事項(xiàng):
1,該項(xiàng)目主要采用的是springboot+thymeleaf框架
2,代碼展示的為ajax完成圖片上傳(如果不用ajax只需要改變相應(yīng)的form表單配置即可)
二、效果實(shí)現(xiàn):
1,頁(yè)面效果:
2,文件夾路徑下就會(huì)多了對(duì)應(yīng)的圖片:
三、代碼實(shí)現(xiàn):
1,在html文本中編輯為(采用thymeleaf框架):
<!-- 圖片文本框 --> <input type="file" class="form-control" id="file" name="file" th:onchange="javascript:preview(this)"> <!-- 這個(gè)是在上傳之前回顯圖片圖片展示 --> <div id="preview"> <!--這個(gè)是為了將頁(yè)面返回的圖片展示出來(lái)的.默認(rèn)隱藏--> <img style="width: 100px; height: 100px;display:none" id="imgHidden" /> </div> <!-- 提交...這里pageIndex和pageSize可傳可不傳,主要取決于提交之后是否需要回到當(dāng)前頁(yè)面. --> <button type="submit" th:onclick="javascript:submitForm([[${pageIndex}]],[[${pageSize}]])" class="btn btn-primary">提交</button>
2,編輯js代碼:
兩種情況:1,有file中有值的時(shí)候提交;2,file文件中沒(méi)有值的時(shí)候提交
function submitForm(pageIndex, pageSize) { var formData = new FormData(); //將需要提交的參數(shù)封裝起來(lái) formData.append("id", $("#id").val()); var zswb = $("#file").val(); //獲取file中的內(nèi)容,看是否有值 if (zswb == '' || zswb.length < 1) { //沒(méi)有file提交的時(shí)候走的接口 $.ajax({ url : '/editMovieWithoutFile', type : 'post', data : formData, processData : false, contentType : false, success : function(value) { var result = JSON.parse(value); if (result == 'true') { window.location.href = "/index?pageIndex=" + pageIndex+ "&pageSize=" + pageSize; } else { Lobibox.alert('error', {msg : "媒資信息更新失敗!!!"}); } } }); } else { //有file提交的時(shí)候走的接口 formData.append("file", $("#file")[0].files[0]); $.ajax({ url : '/editMovieInfo', type : 'post', data : formData, processData : false, contentType : false, success : function(value) { var result = JSON.parse(value); if (result == 'true') { window.location.href = "/index?pageIndex=" + pageIndex+ "&pageSize=" + pageSize; } else { Lobibox.alert('error', {msg : "媒資信息更新失敗!!!"}); } } }); } } //圖片回顯: function preview(file) { $("#imgHidden").css("display", "none"); var prevDiv = document.getElementById('preview'); if (file.files && file.files[0]) { var reader = new FileReader(); reader.onload = function(evt) { prevDiv.innerHTML = '<img style="width: 100px;height: 100px;" src="' + evt.target.result + '" />'; } reader.readAsDataURL(file.files[0]); } else { prevDiv.innerHTML = '<div class="img" style="width: 100px;height:100px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src=\'' + file.value + '\'"></div>'; } }
3,application.properties中的配置上傳的限制
#配置文件傳輸 spring.servlet.multipart.enabled=true spring.servlet.multipart.file-size-threshold=0 #單個(gè)數(shù)據(jù)的大小 spring.servlet.multipart.maxFileSize=100MB #總數(shù)據(jù)的大小 spring.servlet.multipart.maxRequestSize=100MB
4,controller(這里就不演示無(wú)file的情況,因?yàn)橹皇墙邮軈?shù)很簡(jiǎn)單):
/** * 有file文件時(shí) * @param movieDto 封裝了需要傳遞過(guò)來(lái)的參數(shù) * @param file 圖片file */ @RequestMapping("/editMovieInfo") @ResponseBody public String editMovieInfo(@RequestParam("id")final int id,@RequestParam("file")MultipartFile file) { int result = btShareService.editMovieInfo(id,file,uploadDir); if (result > -1) { return JSON.toJSONString("true"); } else { return JSON.toJSONString("false"); } }
5,service層處理:
@Transactional @Override public int editMovieInfo(int id, MultipartFile file,String uploadDir) { try { // 圖片路徑 String imgUrl = null; //上傳 String filename = upload(file, uploadDir, file.getOriginalFilename()); if (!EmptyUtil.isEmpty(filename)) { imgUrl = new File(uploadDir).getName() + "/" + filename; } MovieInfo movie = movieInfoService.selectMovieInfoByDcpId(Integer.valueOf(movieDto.getId())); movie .setImgUrl(imgUrl) movieInfoService.updateMovieInfoByDcpId(movieInfo); return 0; } catch (Exception e) { e.printStackTrace(); return -1; } }
圖片上傳的方法
public String upload(MultipartFile file, String path, String fileName) throws Exception { // 生成新的文件名 String realPath = path + "/" + UUID.randomUUID().toString().replace("-", "")+fileName.substring(fileName.lastIndexOf(".")); File dest = new File(realPath); // 判斷文件父目錄是否存在 if (!dest.getParentFile().exists()) { dest.getParentFile().mkdir(); } // 保存文件 file.transferTo(dest); return dest.getName(); }
6,至于Dao層的操作和數(shù)據(jù)庫(kù)修改這里就直接省略了....
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Java實(shí)現(xiàn)圖片上傳到服務(wù)器并把上傳的圖片讀取出來(lái)
- java web圖片上傳和文件上傳實(shí)例
- java實(shí)現(xiàn)文件上傳下載和圖片壓縮代碼示例
- java通過(guò)模擬post方式提交表單實(shí)現(xiàn)圖片上傳功能實(shí)例
- Java以struts2為例介紹如何實(shí)現(xiàn)圖片上傳
- Java Servlet上傳圖片到指定文件夾并顯示圖片
- Java圖片上傳實(shí)現(xiàn)代碼
- JSP上傳圖片產(chǎn)生 java.io.IOException: Stream closed異常解決方法
- java后臺(tái)接收app上傳的圖片的示例代碼
- java實(shí)現(xiàn)上傳圖片進(jìn)行切割的方法
相關(guān)文章
springboot整合 beatlsql的實(shí)例代碼
這篇文章主要介紹了springboot整合 beatlsql的實(shí)例代碼,BeetSql是一個(gè)全功能DAO工具,同時(shí)具有hibernate 優(yōu)點(diǎn) & Mybatis優(yōu)點(diǎn)功能,有興趣的可以了解一下2017-05-05分析java中全面的單例模式多種實(shí)現(xiàn)方式
單例模式是一種常用的軟件設(shè)計(jì)模式,單例對(duì)象的類(lèi)只能允許一個(gè)實(shí)例存在。許多時(shí)候整個(gè)系統(tǒng)只需要擁有一個(gè)的全局對(duì)象,有利于協(xié)調(diào)系統(tǒng)整體的行為。比如在某個(gè)服務(wù)器程序中,該服務(wù)器的配置信息存放在一個(gè)文件中。本文將介紹它的思想和多種實(shí)現(xiàn)方式2021-06-06java實(shí)例方法被覆蓋,靜態(tài)方法被隱藏Explain(詳解)
下面小編就為大家?guī)?lái)一篇java實(shí)例方法被覆蓋,靜態(tài)方法被隱藏Explain(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05Win11系統(tǒng)下載安裝java的詳細(xì)過(guò)程
這篇文章主要介紹了Win11如何下載安裝java,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05Spring?Security過(guò)濾器鏈加載執(zhí)行流程源碼解析
Spring?Boot?對(duì)于?Spring?Security?提供了自動(dòng)化配置方案,可以使用更少的配置來(lái)使用?Spring?Security。那么這個(gè)過(guò)濾器鏈?zhǔn)窃趺醇虞d和實(shí)現(xiàn)攔截的呢,對(duì)Spring?Security過(guò)濾器鏈加載執(zhí)行流程感興趣的朋友一起看看吧2021-12-12Java中的ReentrantLock實(shí)現(xiàn)原理及代碼演示
這篇文章主要介紹了Java中的ReentrantLock實(shí)現(xiàn)原理及代碼演示,非公平鎖 如果已經(jīng)進(jìn)入隊(duì)列,鏈表里面的線程是先進(jìn)先出,如果已經(jīng)釋放了鎖,在搶占鎖時(shí),鏈表里面的頭結(jié)點(diǎn)和還沒(méi)有入隊(duì)列的線程搶鎖,需要的朋友可以參考下2024-01-01SpringBoot項(xiàng)目整合mybatis的方法步驟與實(shí)例
今天小編就為大家分享一篇關(guān)于SpringBoot項(xiàng)目整合mybatis的方法步驟與實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03jenkins和sonar實(shí)現(xiàn)代碼檢測(cè)過(guò)程詳解
這篇文章主要介紹了jenkins和sonar實(shí)現(xiàn)代碼檢測(cè)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10