詳解SpringMVC實(shí)現(xiàn)圖片上傳以及該注意的小細(xì)節(jié)
先附上圖片上傳的代碼
jsp代碼如下:
<form action="${path}/upload/uploadPic.do" method="post" enctype="multipart/form-data">
<div>

<input type="file" id="input-image" name="input-image">
<input id="input-relative-path" name="imgs" type="hidden" >
<input id="input-last-path" type="hidden">
<input type="submit" value="上傳圖片">
</div>
</form>
controller代碼:通過spring的方式實(shí)現(xiàn)
@Controller
@RequestMapping("/upload")
public class UploadController extends BaseController {
@RequestMapping(value = "/uploadPic", method = RequestMethod.POST)
@LoginCheck
public void uploadPic(HttpServletRequest request, PrintWriter out, String lastRealPath) throws IOException {
// 將當(dāng)前上下文初始化給CommonsMultipartResolver
CommonsMultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
// 檢查form中是否有enctype="multipart/form-data"
if (resolver.isMultipart(request)) {
// 強(qiáng)制轉(zhuǎn)化request
MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
// 從表單獲取input名稱
Iterator<String> iterable = req.getFileNames();
// 存在文件
if (iterable.hasNext()) {
String inputName = iterable.next();
// 獲得文件
MultipartFile mf = req.getFile(inputName);
byte[] mfs = mf.getBytes();
// 定義文件名
String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
Random random = new Random();
for (int i = 0; i < 3; i++) {
fileName = fileName + random.nextInt(10);
}
// 獲得后綴名
String oriFileName = mf.getOriginalFilename();
String suffix = oriFileName.substring(oriFileName.lastIndexOf("."));
// 上傳圖片到本地
String localPath = "/Users/ZR/Desktop/webPro/console/src/main/webapp/image/" + fileName + suffix;
mf.transferTo(new File(localPath));
// 獲取圖片的寬高
BufferedImage bufferedImage = ImageIO.read(new FileInputStream(new File(localPath)));
int width = bufferedImage.getWidth();
int height = bufferedImage.getHeight();
// 獲取文件大小
long size = mf.getSize();
}
}
}
}
spring-mvc.xml代碼:
<!-- 文件上傳的視圖解析器,id值是固定的 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="1024000"/> <!-- 其他屬性 --> </bean>
功能的實(shí)現(xiàn)其實(shí)很簡(jiǎn)單,但是對(duì)于初學(xué)者還是需要注意如下幾個(gè)點(diǎn)
- form上的enctype="multipart/form-data"不能忘記。
- <input type="file" onchange="submitUpload()" id="input-image" name="input-image"> 的name標(biāo)簽可以隨便取名,但是不能忽略,否則Iterator<String> iterable = req.getFileNames();這邊獲取的集合將為空。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)簡(jiǎn)單控制臺(tái)通訊錄
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單控制臺(tái)通訊錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
Spring Boot高可用限流三種實(shí)現(xiàn)解決方案
限流是對(duì)某一時(shí)間窗口內(nèi)的請(qǐng)求數(shù)進(jìn)行限制,保持系統(tǒng)的可用性和穩(wěn)定性,本文就介紹了Spring Boot高可用限流三種實(shí)現(xiàn)解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08
詳解JavaFX桌面應(yīng)用開發(fā)-Group(容器組)
這篇文章主要介紹了JavaFX桌面應(yīng)用開發(fā)-Group(容器組),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
SpringBoot實(shí)戰(zhàn):Spring如何找到對(duì)應(yīng)轉(zhuǎn)換器優(yōu)雅使用枚舉參數(shù)
這篇文章主要介紹了SpringBoot實(shí)戰(zhàn)中Spring是如何找到對(duì)應(yīng)轉(zhuǎn)換器優(yōu)雅的使用枚舉參數(shù),文中附有詳細(xì)的實(shí)例代碼有需要的朋友可以參考下,希望可以有所幫助2021-08-08
Java集合之Set接口及其實(shí)現(xiàn)類精解
set接口是繼承自Collection的子接口,特點(diǎn)是元素不重復(fù),存儲(chǔ)無(wú)序。在set接口的實(shí)現(xiàn)類中添加重復(fù)元素是不會(huì)成功的,判斷兩個(gè)元素是否重復(fù)根據(jù)元素類重寫的2021-09-09
關(guān)于java開發(fā)的性能問題總結(jié)(必看)
下面小編就為大家?guī)?lái)一篇關(guān)于java開發(fā)的性能問題總結(jié)(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-03-03
Mybatis foreach用法解析--對(duì)于list和array
這篇文章主要介紹了Mybatis foreach用法解析--對(duì)于list和array,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03

