Spring MVC實現文件上傳及優(yōu)化案例解析
前言
SpringMVC本身提高了便捷的文件上傳方式,接下來我將演示如何在SpringMVC中實現文件上傳的相關操作。以下案例是基于SSM框架整合的基礎上實現的文件上傳功能,如何進行SSM整合,可以參考我以往的博客。
第一步:添加依賴
pom.xml
<!-- 文件上傳與下載-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>第二步:創(chuàng)建springmvc配置文件,添加文件上傳配置
spring-mvc.xml
<?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"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.1.xsd">
<context:component-scan base-package="com.csx"/>
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/" p:suffix=".jsp"/>
<!--文件上傳 2.加配置,注意id-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
</beans> 開啟掃描
開啟注解
配置視圖解析器
配置文件上傳相關配置
一定要配置id,不能省略,否則報錯(底層根據id加載這個bean)
第三步:創(chuàng)建文件上傳頁面
up.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--文件上傳 3.寫頁面-->
<form action="/user/up.do" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file"> <br/>
<input type="submit" value="提交">
</form>
</body>
</html>
- 請求方式只能是post
- 注意添加enctype屬性
- 文件上傳的type為file,注意name屬性值要與controller層的參數名一致
第四步:寫controller,上傳到指定文件夾
UserController
package com.csx.controller;
import com.csx.entity.User;
import com.csx.service.UserService;
import com.csx.util.PageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/*文件上傳 4.寫controller,上傳至指定文件夾*/
@RequestMapping("/up")
public String fileUpload(MultipartFile file, HttpServletRequest request) throws IOException {
//創(chuàng)建文件夾,上傳文件
//獲得完整路徑
String realPath = request.getSession().getServletContext().getRealPath("/upload");
System.out.println("realPath===" + realPath);
//創(chuàng)建文件夾
File f = new File(realPath);
//如果文件夾不存在,就創(chuàng)建
if (!f.exists()) {
f.mkdirs();
}
//拿到上傳的文件名
String fileName = file.getOriginalFilename();
//將UUID和文件名拼接,防止文件名重名而覆蓋
fileName = UUID.randomUUID() + "_" + fileName;
//創(chuàng)建空文件
File newFile = new File(f, fileName);
//將文件內容寫入
file.transferTo(newFile);
return "index";
}
}代碼解析
文件上傳,controller使用MultipartFile 類型進行接收,并且參數名與頁面的屬性值保持一致
String realPath = request.getSession().getServletContext().getRealPath("/upload");
System.out.println("realPath===" + realPath);
//創(chuàng)建文件夾
File f = new File(realPath);
//如果文件夾不存在,就創(chuàng)建
if (!f.exists()) {
f.mkdirs();
}- 如果文件夾不存在,則創(chuàng)建文件夾upload
//拿到上傳的文件名 String fileName = file.getOriginalFilename(); //將UUID和文件名拼接,防止文件名重名而覆蓋 fileName = UUID.randomUUID() + "_" + fileName;
- 拿到原始文件名,并且使用UUID進行覆蓋,防止上傳同名文件導致文件覆蓋
//創(chuàng)建空文件 File newFile = new File(f, fileName); //將文件內容寫入 file.transferTo(newFile); return "index";
創(chuàng)建空文件,寫入內容,返回Json格式數據
演示效果
地址欄輸入http://localhost:8080/up.html

點擊選擇文件,選擇第5.jpg


點擊提交

返回index,就是我們return的String數據,表示上傳成功,查看upload文件夾

文件上傳成功!
補充:實現局部刷新的異步登錄功能:優(yōu)化用戶體驗的SpringMVC實踐
實現局部刷新的異步登錄功能:優(yōu)化用戶體驗的SpringMVC實踐
前言
什么是異步刷新(局部刷新)
異步刷新是指在不重新加載整個網頁的情況下,僅更新頁面的某個部分。這通常通過AJAX(Asynchronous JavaScript and XML)技術實現,AJAX允許網頁與服務器進行異步通信,即在發(fā)送請求后無需等待服務器響應即可完成其他任務。
案例實現
需求
如圖所示需求:

步驟
在SpringMVC中,實現異步刷新的步驟如下:
- 前端頁面:使用JavaScript(如jQuery)發(fā)送AJAX請求到服務器。這個請求可以包含需要更新的數據或指示服務器更新哪部分頁面的信息。
- SpringMVC控制器:控制器接收AJAX請求,處理請求中的數據,并返回相應的響應。這個響應可以是JSON、XML或其他格式的數據,具體取決于前端頁面的需求。
- 前端頁面更新:當AJAX請求成功返回時,JavaScript使用返回的數據更新頁面的指定部分。這通常涉及使用DOM操作來修改頁面的內容。
準備工作
創(chuàng)建web項目,添加相關依賴,配置springmvc.xml和web.xml配置文件
登錄頁面
login.jsp
<%--
Created by IntelliJ IDEA.
User: 21038
Date: 2024/10/11
Time: 14:13
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="/js/jquery-1.8.3.js" type="text/javascript"></script>
</head>
<body>
<div>
<form id="frm" >
<table>
<tr>
<td>用戶名:<input type="text" id="user_name" name="user_name" value=""/></td>
<td>密碼:<input type="password" id="password" name="password" value=""/></td>
<td><input type="button" id="commit" value="登錄" /></td>
</tr>
<tr>
<td>
<span id="s1" ></span>
</td>
</tr>
</table>
</form>
<script>
var user="";
$(function () {
$("#commit").click(function () {
$.ajax({
type:'POST',
url:'/login.do',
data:$("#frm").serialize(),
success:function (res) {
user=res;
console.log(user)
if (user==""){
$("#s1").html("");
}else {
$("#s1").html("用戶:"+user+",歡迎登錄!");
}
$("#user_name").val("");
$("#password").val("");
}
});
});
});
</script>
</body>
</html>使用AJAX進行異步提交數據到controller,并獲取響應的Json格式數據,接收到數據后,將數據填充到頁面指定位置。
控制器
LoginController
@RestController
public class LoginController {
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String LoginController(String user_name , String password ){
if ("admin".equals(user_name) && "123".equals(password)){
return user_name;
}
return "";
}
}測試
輸入賬戶:admin和密碼:123

點擊登錄按鈕,發(fā)送ajax請求

頁面異步刷新,獲取到后臺傳輸過來的數據,并填寫到頁面中。
到此這篇關于Spring MVC實現高效文件上傳及優(yōu)化案例的文章就介紹到這了,更多相關Spring MVC文件上傳內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決javac不是內部或外部命令,也不是可運行程序的報錯問題
在學著使用Java的命令行來編譯java文件的時候,遇到了這個問題,本文主要介紹了解決javac不是內部或外部命令,也不是可運行程序的報錯問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04
SpringBoot如何使用RequestBodyAdvice進行統一參數處理
這篇文章主要介紹了SpringBoot使用RequestBodyAdvice進行統一參數處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06

