前后端分离实现图片上传的功能
生活随笔
收集整理的這篇文章主要介紹了
前后端分离实现图片上传的功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
由于最近開發的項目需要有上傳圖片的功能,并且能夠讓上傳的圖片能夠在網頁上預覽出來。所以寫下此篇文章,記錄一下學習到的知識。
1,前端
前端項目是采用angularjs框架搭建的。圖片上傳功能在前端的代碼分布在兩個部分,一部分是圖片上傳頁面的表單代碼,一部分是在對應的controller中的代碼。下面對這兩方面代碼進行展示。
(1)頁面代碼
(2)controller代碼
//對修改后的菜單進行保存$scope.saveInfo=function(){var menuId=$scope.dataItem.menuId;var imgAddress=$scope.dataItem.imgAddress;var imgFlag="1";var reg = /^[0-9]+.?[0-9]*$/;if(menuName == null || menuName == ""){$alert.info({'message' : '菜單名稱不能為空!'});}else if(showOrder!=''&&!reg.test(showOrder)){$alert.info({'message' : '檢查順序號是否為數字!'});} else{var file = document.getElementById("file").files;// 使用FormData對象類型向后臺傳文件var fd = new FormData(document.getElementById("editForm"));if(file.length==0){imgFlag="0";}else{imgFlag="1";}$http({method:'post',url:SpringBootWebApp.contextPath +"alterMenu",data:fd,contentType : 'application/json',headers : {'Content-Type' : undefined},params:{"menuId":menuId,"imgAddress":imgAddress,"imgFlag":imgFlag}}).success(function(data){if(data.Code=="0"){$alert.tip(data.Msg);}else{$alert.tip_error(data.Msg);}//設置返回函數$scope.goToList();}).error(function(data){alert(data.error);});}}//返回菜單列表方法$scope.goToList = function() {$location.path('/bankAdmin/hos_menu/list');}//預覽圖片的方法$scope.lookImg=function(){var result=document.getElementById("imgadd");var file=document.getElementById("file").files;if(file.length==0){$alert.error({message:"請選擇一張圖片!"});return;}if(typeof FileReader==='undefined'){result.innerHTML="抱歉,你的瀏覽器不支持 FileReader";file.setAttribute('disabled','disabled');}else{var reader=new FileReader();reader.readAsDataURL(file[0]);reader.onload = function(e){result.src=reader.result;}}}2,后端代碼
(1)controller層
(2)service層
public Map<String,String> altermenu(String menuId,String imgAddress,String imgFlag,MultipartFile file){//查找對應菜單id的菜單HosMenu hosMenu = hosMenuRepository.findByMenuId(menuId);//設置圖片名稱String finename =menuId+".jpg";//判斷圖片是否有路徑傳入if("1".equals(imgFlag)){//對圖片進行保存createImgpath(hosMenu,finename,file);}else {//無新圖上傳則直接保存先前圖片地址hosMenu.setImgAddress(imgAddress);}Map<String,String> resultMap = new HashMap<>();resultMap.put("Code","0");resultMap.put("Msg","修改成功!");//保存hosMenuRepository.save(hosMenu);return resultMap;}//創建上傳的圖片路徑public void createImgpath(HosMenu hosMenu,String fileName,MultipartFile file ){//根據hospitalmenu/菜單id 來建立圖片路徑String relativeFilePath="hospitalmenu/"+hosMenu.getMenuId()+"/";hosMenu.setImgAddress(relativeFilePath+fileName);//保存訪問的路徑String saveFilePath = SystemParameterService.getInstance().getParameterValue("path-photofiles") + relativeFilePath;File fileDir = new File(saveFilePath);if (!fileDir.exists()) {// 構建層級目錄fileDir.mkdirs();}// 保存圖片String filePath = saveFilePath + fileName;saveImg(filePath,file);}//圖片資源保存public void saveImg(String filePath, MultipartFile file){// 保存圖片try {FileOutputStream out = new FileOutputStream(filePath);BufferedInputStream is = new BufferedInputStream(file.getInputStream());int count = 0;byte[] buffer = new byte[1024];// 一個一個字節的讀取并寫入while ((count = is.read(buffer)) != (-1)) {out.write(buffer, 0, count);}out.flush();out.close();is.close();} catch (Exception e) {e.printStackTrace();}}(3)效果頁面展示
總結
以上是生活随笔為你收集整理的前后端分离实现图片上传的功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我国北斗卫星导航系统今日起试运行
- 下一篇: java动态分配空间吗,当执行new为一