日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC图片文件上传功能实现

發布時間:2023/12/15 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC图片文件上传功能实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SpringMVC圖片文件上傳功能實現



1. 在工程依賴庫下添加文件上傳jar包

commons-fileupload-1.2.2.jar

commons-io-2.4.jar

2.jsp頁面設置form表單屬性enctype

在表單中上傳圖片時,需要在form的屬性設置中添加enctype="multipart/form-data"。

[html]?view plaincopy
  • <form?id="itemForm"?action="${pageContext.request.contextPath?}/items/editItemsSubmit.action"?method="post"?enctype="multipart/form-data"?>??

  • 表單中enctype="multipart/form-data"的意思,是設置表單的MIME編碼。默認情況,這個編碼格式是application/x-www-form-urlencoded,不能用于文件上傳;只有使用了multipart/form-data,才能完整的傳遞文件數據,進行下面的操作. enctype="multipart/form-data"是上傳二進制數據;form里面的input的值以2進制的方式傳過去。

    頁面上如果要添加多個圖片應設置:


    javaScript 添加文件函數:

    <script type="text/javascript" src="js/jquery-2.1.1.min.js"></script> <script type="text/javascript">function addImg() {$("#addimg").after('<input type="file" name="proImg" id="proImg" />');} </script>然后在控制器上進行修改 把文件屬性變成數組<img src="https://img-blog.csdnimg.cn/2022010700504186556.png" alt="" />


    3. springMVC.xml添加multipart類型解析器

    在頁面form中提交enctype="multipart/form-data"的數據時,需要springmvc對multipart類型的數據進行解析,需要在springmvc.xml中配置multipart類型解析器。

    [html]?view plaincopy
  • <!--?文件上傳?-->??
  • <bean?id="multipartResolver"??
  • ????class="org.springframework.web.multipart.commons.CommonsMultipartResolver">??
  • ????<!--?設置上傳文件的最大尺寸為5MB?-->??
  • ????<property?name="maxUploadSize">??
  • ????????<value>5242880</value>??
  • ????</property>??
  • </bean>??

  • 4.創建圖片虛擬目錄,以存放圖片

    eclipse IDE 通過界面進行配置:servers -->Tomcat v8.0 Server at localhost--> 雙擊,選擇-->add external web modules.

    在圖片虛擬目錄中,一定將圖片目錄分級創建(提高i/o性能),一般我們采用按日期(年、月、日)進行分級創建。

    5. jsp 頁面,設置圖片顯示的位置和大小。

    [html]?view plaincopy
  • <tr>??
  • <td>商品圖片</td>??
  • <td>??
  • ????<c:if?test="${itemsCustom.pic?!=null}">??
  • ????????<img?src="/pic/${itemsCustom.pic}"?width=100?height=100/>??
  • ????????<br/>??
  • ????</c:if>??
  • ????<input?type="file"??name="items_pic"/>???
  • </td>??
  • lt;/tr>???
  • 6. Controller 類方法中寫相應的方法

    <1, 方法的參數中添加MultipartFile items_pic行參 ?這個跟頁面的圖片的參數名字是一致的;

    <2, 為了避免文件名稱相同而沖突,使用UUID.randomUUID()產生一個隨機的數值作為名稱;

    <3. 將圖片數據寫入磁盤:items_pic.transferTo(newFile);

    <4. 更新itemsCustom中屬性pic的值itemsCustom.setPic(newFileName);

    [java]?view plaincopy
  • ????//在需要校驗的poJo類前加?@Validated,?后面加BindingResult?bindingResult?存放出錯信息。??
  • ????@RequestMapping("/editItemsSubmit")??
  • ????public?String?editItemsSubmit(Model?model,???
  • ????????????HttpServletRequest?request,Integer?id,??
  • ????????????@Validated?ItemsCustom?itemsCustom,???
  • ????????????BindingResult?bindingResult,??
  • ????????????MultipartFile?items_pic)throws?Exception?{??
  • ??????????
  • ????????if(bindingResult.hasErrors()){??
  • ????????????List<ObjectError>?allErrors?=?bindingResult.getAllErrors();??
  • ????????????for(ObjectError?objectError?:allErrors){??
  • ????????????????System.out.println(objectError.getDefaultMessage());??
  • ????????????}??
  • ??????????????
  • ????????????model.addAttribute("allErrors",?allErrors);??
  • ????????????model.addAttribute("itemsCustom",?itemsCustom);??
  • ????????????return?"items/editItems";??
  • ????????}?????????
  • ??????????
  • ????????//原始名稱??
  • ????????String?originalFilename?=?items_pic.getOriginalFilename();??
  • ????????//上傳圖片??
  • ????????if(items_pic!=null?&&?originalFilename!=null?&&?originalFilename.length()>0){??????????
  • ????????//存儲圖片的物理路徑??
  • ????????String?pic_path?=?"C:\\Users\\Administrator.MICROSO-U8JSS8B\\Desktop\\java_code\\picture\\";??
  • ????????//新的圖片名稱??
  • ????????String?newFileName?=?UUID.randomUUID()?+?originalFilename.substring(originalFilename.lastIndexOf("."));??
  • ????????//新圖片??
  • ????????File?newFile?=?new?File(pic_path+newFileName);??
  • ????????//將內存中的數據寫入磁盤??
  • ????????items_pic.transferTo(newFile);????
  • ????????//將新圖片名稱寫到itemsCustom中??
  • ????????itemsCustom.setPic(newFileName);??
  • ??????????????
  • ????????}??
  • ????????itemsService.updateItems(id,?itemsCustom);??
  • ???????????
  • //??????return?"success";??
  • ????????return?"forward:queryItems.action";??
  • ????}??
  • 7.測試效果



    中間出現錯誤org.springframework.beans.BeanInstantiationException:Could not instantiate bean class [org.springframework.web.multipart.MultipartFile]:Specified class is an interfaceorg.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:101)org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:762)org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:356)org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)javax.servlet.http.HttpServlet.service(HttpServlet.java:646)javax.servlet.http.HttpServlet.service(HttpServlet.java:727)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    解決方案:解決方案:在Controller的MultipartFile參數前面加上@RequestParam就解決了!

    總結

    以上是生活随笔為你收集整理的SpringMVC图片文件上传功能实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。