<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          你要的Spring Boot多圖片上傳回顯功能已經(jīng)實現(xiàn)了,趕緊收藏吃灰~

          共 7954字,需瀏覽 16分鐘

           ·

          2021-06-19 17:07

          不點藍字,我們哪來故事?

          每天 11 點更新文章,餓了點外賣,點擊 ??《無門檻外賣優(yōu)惠券,每天免費領!》

          作者 | 不學無數(shù)的程序員

          來源 | https://www.jianshu.com/p/3e28b94444be

          SpringBoot 2.0 多圖片上傳加回顯

          這兩天公司有需求讓做一個商戶注冊的后臺功能,其中需要商戶上傳多張圖片并回顯。由于之前沒做過這方面的東西,此篇文章用以記錄一些知識點,以便后續(xù)查看。

          上傳

          Controller的代碼非常簡單,由于用了SpringMVC框架,所以直接用MultipartFile來接即可。由于是多圖片上傳所以用數(shù)組來接。此處應該注意參數(shù)名應該和<input>中的name值相對應

          @RequestMapping("/pic")
          @ResponseBody
          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("圖片不能同時為空");
              }
              responseEntity.setCode(ResponseEntity.OK);
              responseEntity.setMessage("上傳成功");
              return responseEntity;
          }

          前端頁面的代碼,此處的name值和Controller的參數(shù)名稱是對應的

          <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,
                  processDatafalse,
                  contentTypefalse,
                  success:(function(data{
                      window.confirm(data.message);
                      window.location.reload();
                  }),
                  error:(function(res{
                      alert("失敗");
                  })
              });
          }

          效果展示

          初始頁面如下

          像Swing這種已經(jīng)不太用的技術,大學還在教,到底要不要學?

          上傳完圖片以后回顯為

          Spring Boot 搭建 ELK,這才是正確看日志的方式!

          點擊提交以后可將圖片上傳至后臺

          配置上傳圖片的屬性

          默認情況下只允許上傳1MB以下的圖片,如果要設置上傳圖片大小。那么需要在配置文件中如下配置

          spring:
            servlet:
              multipart:
                enabled: true
                max-file-size: 20MB
                max-request-size: 20MB

          關于文件的配置有下面幾個

          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ù)訪問時延遲解析多部分請求

          異常處理

          異常處理用了Springboot提供的全局異常處理機制。只需要在類上加入@ControllerAdvice注解即可。在方法上加入@ExceptionHandler(想要攔截的異常類)就能攔截所有Controller的異常了。如果想要攔截指定為特定的Controller只需要在@ControllerAdvice(basePackageClasses=想要攔截的Controller)

          @ControllerAdvice
          @Slf4j
          public class CommonExceptionHandler extends ResponseEntityExceptionHandler {

              @ExceptionHandler(NullOrEmptyException.class)
              @ResponseBody
              public ResponseEntity<StringnullOrEmptyExceptionHandler(HttpServletRequest requestNullOrEmptyException exception)
          {
                  log.info("nullOrEmptyExceptionHandler");
                  return handleErrorInfo(request, exception.getMessage());
              }

              @ExceptionHandler(value = Exception.class)
              @ResponseBody
              public ResponseEntity<StringdefaultErrorHandler(HttpServletRequest requestException 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注解,因為如果加了的話會被解析成Json串返回。

          • 注意前端所傳參數(shù)名和后端接收參數(shù)名一一對應。不然會報405錯誤

          • 使用IDEA開發(fā)如果使用了lombok那么需要在Annotation Processors中將Enable annotation processing打對勾

          往期推薦

          2021最新版 Spring 面試題,收藏點起來!

          QPS、TPS、并發(fā)用戶數(shù)、吞吐量,一文秒懂

          快來搶紅包!

          微信紅包的CAP

          下方二維碼關注我

          技術草根堅持分享 編程,算法,架構

          看完文章,餓了點外賣,點擊 ??《無門檻外賣優(yōu)惠券,每天免費領!》

          朋友,助攻一把!點個在看!
          瀏覽 48
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  三级a片在线观看 | 丁香婷婷综合激情五月色 | 精品视频一区二区三区四区 | 中文字幕A片无码免费看 | 久久婷婷网站 |