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

歡迎訪問 生活随笔!

生活随笔

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

javascript

Spring MVC-09循序渐进之文件上传(基于Apache Commons FileUpload)

發布時間:2025/3/21 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring MVC-09循序渐进之文件上传(基于Apache Commons FileUpload) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 概述
  • 客戶端編程
  • MultipartFile接口
  • 利用Commons FileUpload上傳文件
  • Domain類
  • 控制器
  • 配置文件
  • JSP頁面
  • 部署及測試
  • 源碼

概述

Servlet出現之前,文件上傳的開發比較困難,主要涉及在服務端解析原始的HTTP響應。 03年Apache發布了開源的Commons FileUplaod組件,極大地提高了文件上傳的開發效率。

經過很多年,Servlet的設計人員才意識到文件上傳的重要性,最終文件上傳還是成了Servlet3的內置特性。

因此,在SpringMVC中處理文件上傳主要有兩種方法

  • 利用Apache Commons FileUpload組件

  • 利用Servlet3.0及其更高版本的內置支持

本篇博文我們探討利用Apache Commons FileUpload組件來實現文件的上傳


客戶端編程

為了上傳文件,必須將HTML表格的enctype屬性設置為 multipart/form-data

如下

<form action="action" enctype="multipart/form-data" method="post">Select a file<input type="file" name="fileName"/><input type="submit" value="Upload"/> </form>

表格中必須包含類型為file的一個input元素,它會顯示成一個按鈕,點擊時會打開一個對話框,用來選擇文件。

HTML之前,如果要上傳多個文件,需要使用多個input元素。 但是HTML5中,通過input元素中一如多個multiple屬性,使得多個文件的上傳更加簡單。 在HTML5中編寫以下任意一行代碼,遍可以生成一個按鈕選擇多個文件

<input type="file" name="fileName" multiple/> <input type="file" name="fileName" multiple="multiple"/> <input type="file" name="fileName" multiple=""/>

MultipartFile接口

上傳到Spring MVC應用程序中的文件會被包裝在一個MultipartFile對象中,我們僅僅用類型為MultipartFile的屬性編寫一個domain類即可

接口方法如下


利用Commons FileUpload上傳文件

只有實現了Servlet3.0及其更高版本規范的Servlet容器,才支持文件上傳。 對于低于Servlet3.0的容器,則需要使用Apache Commons FileUpload組件

maven依賴如下

<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version> </dependency>

我們使用1.3.1的版本


Domain類

我們的dimain類 Product,有一個類型為List< MultipartFile >的images屬性

package com.artisan.domain;import java.io.Serializable; import java.util.List;import javax.validation.constraints.Size;import org.hibernate.validator.constraints.NotBlank; import org.springframework.web.multipart.MultipartFile;public class Product implements Serializable {private static final long serialVersionUID = -5379168879247929742L;@NotBlank@Size(min = 1, max = 10)private String name;private String description;private float price;//在Domain類中加入MultipartFile類型的屬性,用來保存上傳的文件private List<MultipartFile> images;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}public List<MultipartFile> getImages() {return images;}public void setImages(List<MultipartFile> images) {this.images = images;}}

控制器

控制器有兩個處理請求的方法,inputProduct方法向瀏覽器返回一個產品表單,saveProduct方法將上傳的文件保存到指定目錄下

package com.artisan.controller;import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List;import javax.servlet.http.HttpServletRequest;import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MultipartFile;import com.artisan.domain.Product;@Controller @RequestMapping("/product") public class ProductController {private static final Logger logger = Logger.getLogger(ProductController.class);@RequestMapping(value="/product_input",method=RequestMethod.GET)public String inputProduct(Model model){model.addAttribute("product",new Product());return "ProductForm";}@RequestMapping(value="/product_save",method=RequestMethod.POST)public String saveProduct(HttpServletRequest servletRequest,@ModelAttribute Product product,BindingResult bindingResult, Model model) {List<MultipartFile> files = product.getImages();List<String> fileNames = new ArrayList<String>();if (null != files && files.size() > 0) {for (MultipartFile multipartFile : files) {String fileName = multipartFile.getOriginalFilename();logger.info("fileName:" + fileName);fileNames.add(fileName);// 上傳后的文件保存目錄及名字File imageFile = new File("D:/", fileName);try {// 轉存文件multipartFile.transferTo(imageFile);logger.info("save image successfully");} catch (IOException e) {e.printStackTrace();}}}// save product heremodel.addAttribute("product", product);return "ProductDetails";}}

保存文件只需要在MultipartFile調用transferTo方法即可,非常便捷簡單。


配置文件

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 掃描控制層的注解,使其成為Spring管理的Bean --><context:component-scan base-package="com.artisan.controller" /><!-- 靜態資源文件 --><mvc:annotation-driven /><mvc:resources mapping="/css/**" location="/css/" /><mvc:resources mapping="/*.jsp" location="/" /><!-- 視圖解析器 --><bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><!--1 CommonsMultipartResolver第一個需要使用 Apache 的 commons-fileupload 等 jar 包支持,但它可以在 servlet3.0以下的 版本中使用--><!-- SpringMVC上傳文件時,需要配置MultipartResolver處理器 --><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="2000000"/><property name="defaultEncoding" value="utf-8"/><property name="maxInMemorySize" value="40960"/></bean></beans>

利用multipartResolver bean中的各種屬性設置合理的文件上傳限制條件。


JSP頁面

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML> <html> <head> <title>Add Product Form</title> <style type="text/css">@import url("<c:url value="/css/main.css"/>");</style> </head> <body><div id="global"> <form:form commandName="product" action="product_save" method="post" enctype="multipart/form-data"><fieldset><legend>Add a product</legend><p><label for="name">Product Name: </label><form:input id="name" path="name" cssErrorClass="error"/><form:errors path="name" cssClass="error"/></p><p><label for="description">Description: </label><form:input id="description" path="description"/></p><p><label for="price">Price: </label><form:input id="price" path="price" cssErrorClass="error"/></p><p><label for="image">Product Image: </label><input type="file" name="images[0]"/> </p><p id="buttons"><input id="reset" type="reset" tabindex="4"><input id="submit" type="submit" tabindex="5" value="Add Product"></p></fieldset> </form:form> </div> </body> </html> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML> <html> <head> <title>Save Product</title> <style type="text/css">@import url("<c:url value="/css/main.css"/>");</style> </head> <body> <div id="global"><h4>The product has been saved.</h4><p><h5>Details:</h5>Product Name: ${product.name}<br/>Description: ${product.description}<br/>Price: $${product.price}<p>Following files are uploaded successfully.</p><ol><c:forEach items="${product.images}" var="image">${image.originalFilename}</c:forEach></ol></p> </div> </body> </html>

部署及測試

看到目標目錄D盤:

上傳成功。


源碼

代碼已提交到github

https://github.com/yangshangwei/SpringMvcTutorialArtisan

總結

以上是生活随笔為你收集整理的Spring MVC-09循序渐进之文件上传(基于Apache Commons FileUpload)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产成人无码精品久在线观看 | 91免费看片 | 抱着老师的嫩臀猛然挺进视频 | 国产精品第56页 | a天堂资源在线观看 | 欧美成人午夜影院 | 亚洲精品视频一区 | 在线观看成人网 | 国产a大片 | 吻胸摸激情床激烈视频大胸 | а√天堂资源在线 | 精品久久久中文字幕 | 超碰日日夜夜 | 三级精品在线观看 | 亚洲精品v| 日韩资源网 | 老熟妇一区二区三区啪啪 | 天天干天天狠 | 老熟女重囗味hdxx69 | 久久国产精品无码一区二区 | 国产午夜在线视频 | 亚洲高清资源 | av男人的天堂在线 | 国产极品视频在线观看 | 一个人看的毛片 | 午夜免费网址 | 超碰在线播放97 | 窝窝视频在线 | 亚洲色诱 | 日韩欧美视频二区 | 毛片无码一区二区三区a片视频 | 久久精品一区二区在线观看 | 精品免费观看 | 欧美操操| 成人亚洲视频 | 男女做那个的全过程 | 天天躁日日躁狠狠躁欧美 | 久久香蕉精品视频 | 一本色道久久hezyo加勒比 | 欧美大片在线 | 免费看日韩 | 特级西西444www大精品视频免费看 | 日韩欧美视频一区二区三区 | 国产一区视频在线播放 | 亚洲欧洲一级 | 精品国产乱码久久久 | 亚洲综合在线视频 | 中文字幕人妻互换av久久 | 欧美性猛交乱大交xxxx | 欧美男女交配视频 | 国产麻豆午夜三级精品 | 日韩中文字幕在线观看 | 在线观看的网站 | 美女被草出水 | a√在线观看 | 意大利性荡欲xxxxxx | 美女久久久久久久 | 日本黄色不卡 | 亚洲一区影视 | 欧美色涩 | 手机av网| 可以免费看污视频的网站 | 青青草视频播放器 | 美女一区二区视频 | 求av网站| 麻豆免费观看网站 | 国产人与zoxxxx另类 | 日韩三级免费看 | 久青草视频在线观看 | 国产精品激情 | 亚洲综合色在线观看 | 国产精品久久久91 | 日本成人免费视频 | 亚洲激情啪啪 | 69网址| 少妇在线| 国产黄色大片在线观看 | 日韩视频中文字幕在线观看 | 精品一区二区三区欧美 | 337p嫩模大胆色肉噜噜噜 | 97超碰精品 | 桃色综合网 | 六月色婷| 国产乱淫精品一区二区三区毛片 | aaa一区二区 | 亚洲天堂av中文字幕 | 91国在线视频 | 午夜av影院 | 欧美aaa一级片 | 成年人久久 | 国产欧美一区二 | 一区二区三区欧美在线 | 99re这里都是精品 | 成人一级影视 | 欧美激情亚洲综合 | 欧美久草| 肉大榛一进一出免费视频 | 精品久久久久久久久久久国产字幕 | 69精品在线观看 |