同學(xué),基于SpringBoot的多圖片上傳回顯功能已經(jīng)實(shí)現(xiàn)了~
大家好,我是武哥
歡迎關(guān)注武哥聊編程,優(yōu)質(zhì)文章 都在這里
來源:https://www.jianshu.com/p/3e28b94444be
# SpringBoot 2.0 多圖片上傳加回顯
之前有粉絲說讓寫個(gè)多圖上傳回顯功能學(xué)習(xí)一下,由于之前沒做過這方面的東西,此篇文章用以記錄一些知識(shí)點(diǎn),以便后續(xù)查看。
# 上傳
Controller的代碼非常簡單,由于用了SpringMVC框架,所以直接用MultipartFile來接即可。由于是多圖片上傳所以用數(shù)組來接。此處應(yīng)該注意參數(shù)名應(yīng)該和<input>中的name值相對(duì)應(yīng)
("/pic")public ResponseEntity<String> pic(MultipartFile [] pictures) throws Exception {ResponseEntity<String> responseEntity = new ResponseEntity<>();long count = Arrays.asList(pictures).stream().map(MultipartFile::getOriginalFilename).filter(String::isEmpty).count();if (count == pictures.length){responseEntity.setCode(ResponseEntity.ERROR);throw new NullOrEmptyException("圖片不能同時(shí)為空");}responseEntity.setCode(ResponseEntity.OK);responseEntity.setMessage("上傳成功");return responseEntity;}
前端頁面的代碼,此處的name值和Controller的參數(shù)名稱是對(duì)應(yīng)的
<div class="container"><div class="avatar-upload"><div class="avatar-edit"><input type='file' name="pictures" id="imageOne" accept=".png, .jpg, .jpeg"/><label for="imageOne"></label></div><div class="avatar-preview"><div id="imageOnePreview"style="background-image: url(http://ww3.sinaimg.cn/large/006tNc79ly1g556ca7ovqj30ak09mta2.jpg);"></div></div></div></div>
js代碼回顯
function readURLOne(input) {if (input.files && input.files[0]) {var reader = new FileReader();reader.onload = function(e) {$('#imageOnePreview').css('background-image', 'url("+e.target.result +")");$('#imageOnePreview').hide();$('#imageOnePreview').fadeIn(650);}reader.readAsDataURL(input.files[0]);}}$("#imageOne").change(function() {readURLOne(this);});
js代碼上傳
function getUpload(){//獲取form表單中所有屬性 key為name值var formData = new FormData($("#picForm")[0]);$.ajax({url: '/pic',type: 'POST',dataType:"json",data: formData,processData: false,contentType: false,success:(function(data) {window.confirm(data.message);window.location.reload();}),error:(function(res) {alert("失敗");})});}
# 效果展示
初始頁面如下

上傳完圖片以后回顯為

點(diǎn)擊提交以后可將圖片上傳至后臺(tái)
# 配置上傳圖片的屬性
默認(rèn)情況下只允許上傳1MB以下的圖片,如果要設(shè)置上傳圖片大小。那么需要在配置文件中如下配置
spring:servlet:multipart:enabled: true: 20MB: 20MB
關(guān)于文件的配置有下面幾個(gè)
spring.servlet.multipart.enabled=true # 是否支持多文件上傳spring.servlet.multipart.file-size-threshold=0B # 文件寫入磁盤的閾值spring.servlet.multipart.location= # 上傳文件的保存地址spring.servlet.multipart.max-file-size=1MB # 上傳文件的最大值spring.servlet.multipart.max-request-size=10MB # 請求的最大值spring.servlet.multipart.resolve-lazily=false # 是否在文件或參數(shù)訪問時(shí)延遲解析多部分請求
# 異常處理
異常處理用了Springboot提供的全局異常處理機(jī)制。只需要在類上加入@ControllerAdvice注解即可。在方法上加入@ExceptionHandler(想要攔截的異常類)就能攔截所有Controller的異常了。如果想要攔截指定為特定的Controller只需要在@ControllerAdvice(basePackageClasses=想要攔截的Controller)
public class CommonExceptionHandler extends ResponseEntityExceptionHandler {(NullOrEmptyException.class)public ResponseEntity<String> nullOrEmptyExceptionHandler(HttpServletRequest request, NullOrEmptyException exception){log.info("nullOrEmptyExceptionHandler");return handleErrorInfo(request, exception.getMessage());}(value = Exception.class)public ResponseEntity<String> defaultErrorHandler(HttpServletRequest request, Exception exception){log.info("defaultErrorHandler");return handleErrorInfo(request, exception.getMessage());}private ResponseEntity<String> handleErrorInfo(HttpServletRequest request, String message) {ResponseEntity<String> responseEntity = new ResponseEntity<>();responseEntity.setMessage(message);responseEntity.setCode(ResponseEntity.ERROR);responseEntity.setData(message);responseEntity.setUrl(request.getRequestURL().toString());return responseEntity;}}
遇到的坑
如果返回值是模板文件的文件名,那么無論是類上還是方法上都不能加@ResponseBody注解,因?yàn)槿绻恿说脑挄?huì)被解析成Json串返回。
注意前端所傳參數(shù)名和后端接收參數(shù)名一一對(duì)應(yīng)。不然會(huì)報(bào)405錯(cuò)誤
使用IDEA開發(fā)如果使用了lombok那么需要在Annotation Processors中將Enable annotation processing打?qū)?/span>

----------- end -----------
我已經(jīng)更新了我的《10萬字Springboot經(jīng)典學(xué)習(xí)筆記》中,點(diǎn)擊下面小卡片,進(jìn)入【武哥聊編程】,回復(fù):筆記,即可免費(fèi)獲取。
點(diǎn)贊是最大的支持


