springmvc利用jquery.form插件異步上傳文件示例
需要的下載文件:
jQuery.form.js
jquery.js
commons-fileupload.jar
commons-io.jar
示例圖片

pom.xml
<!-- 文件上傳 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
web.xml 解決上傳后中文文件名亂碼問題
<!-- 解決提交時(shí)中文亂碼問題 start -->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 解決提交時(shí)中文亂碼問題 end -->
servlet-context.xml中添加對(duì)上傳的支持
<!-- 支持文件上傳 --> <beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> </beans:bean>
jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path;
%>
<html lang="us">
<head>
<meta charset="utf-8">
<title>springmvc上傳文件</title>
<link type="text/css" href="<%=basePath%>/resources/css/jquery-ui/jquery-ui.css" rel="stylesheet" />
<link href="<%=basePath%>/resources/themes/bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<h2>springmvc上傳文件</h2>
<br/>
<br/>
<div class="alert alert-success" id="formSucc"></div>
<br/>
<form role="form" id="uploadForm" name="uploadForm" enctype="multipart/form-data">
<div class="form-group">
<label>項(xiàng)目名稱</label>
</div>
<div class="form-group">
<label>
<input class="form-control" maxlength="30" id="projectName" name="projectName">
</label>
</div>
<div class="form-group">
<label>File input</label>
<input type="file" name="file">
</div>
<button class="btn" type="button" id="doSave">提交</button>
</form>
<div></div>
</body>
</html>
<script type="text/javascript" src="<%=basePath%>/resources/js/jquery/jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="<%=basePath%>/resources/js/jquery-ui/jquery-ui.js"></script>
<script type="text/javascript" src="<%=basePath%>/resources/js/jqueryForm/jquery.form.js"></script>
<script>
$(function(){
$("#formSucc").hide();
$("#doSave").click(function(){
var requestUrl = "<%=basePath%>/widget/saveFile.json";
var projectName = $("#projectName").val();
$("#uploadForm").ajaxSubmit({
type: 'post',
url: requestUrl,
//data: {projectName: projectName}, //應(yīng)該把這個(gè)去掉,要不然,值會(huì)有重復(fù),因?yàn)閒orm提交時(shí)已經(jīng)做了一次提交了。
//如果projectName的值為"tt",如果這個(gè)地方不去掉,那么提交接收的值變成"tt,tt"了。
contentType: "application/x-www-form-urlencoded; charset=utf-8",
success: function(data) {
if(data.success){
$(".infoTips").remove();
$("#formSucc").show();
$("#formSucc").append("<label class='infoTips'>"+data.message+"</label>");
}
}
});
});
});
</script>
Java的controller文件
package com.paincupid.springmvc.widget.controller;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.paincupid.springmvc.finance.domain.Finance;
import com.paincupid.springmvc.test.domain.Person;
import com.paincupid.springmvc.util.BaseJsonRst;
import com.paincupid.springmvc.util.CreatMockData;
/**
*
* @author arthur.paincupid.lee
* @since 2016.01.24
*
*/
@Controller
@RequestMapping("/widget")
public class widgetController {
private static final Logger log = LoggerFactory.getLogger(widgetController.class);
/**
* 上傳文件
* 在前臺(tái)的訪問路徑為: http://localhost:8080/springmvc/widget/uploadFile/view
* @return
*/
@RequestMapping("/uploadFile/view")
public String uploadFile() {
return "widget/uploadFile";
}
@ResponseBody
@RequestMapping(value="/saveFile", method=RequestMethod.POST)
public BaseJsonRst saveFile(@RequestParam MultipartFile file,
@RequestParam String projectName) {
BaseJsonRst view = new BaseJsonRst();
String orgiginalFileName = "";
try {
String fileName = file.getName();
InputStream inputStream = file.getInputStream();
String content = file.getContentType();
orgiginalFileName = file.getOriginalFilename();
log.info("fileName: "+fileName+", inputStream: "+ inputStream
+"\r\n content: "+content+", orgiginalFileName: ="+ orgiginalFileName
+"\r\n projectName: "+ projectName);
} catch (IOException e) {
e.printStackTrace();
}
view.setSuccess(true);
view.setMessage("上傳: "+orgiginalFileName+" 文件成功!");
return view;
}
}
下載源碼地址:http://xiazai.jb51.net/201701/yuanma/springmvc_jb51.rar
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Fluent Mybatis實(shí)際開發(fā)中的優(yōu)勢(shì)對(duì)比
本文給大家介紹如何通過IQuery和IUpdate定義強(qiáng)大的動(dòng)態(tài)SQL語(yǔ)句,給大家分享Fluent Mybatis實(shí)際開發(fā)中的優(yōu)勢(shì)講解,感興趣的朋友一起看看吧2021-08-08
spring-boot-thin-launcher插件分離jar包的依賴和配置方式
這篇文章主要介紹了spring-boot-thin-launcher插件分離jar包的依賴和配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
SpringCloud使用Ribbon實(shí)現(xiàn)負(fù)載均衡的流程步驟
在微服務(wù)架構(gòu)中,負(fù)載均衡是一項(xiàng)關(guān)鍵的技術(shù),它可以確保各個(gè)服務(wù)節(jié)點(diǎn)間的負(fù)載分布均勻,提高整個(gè)系統(tǒng)的穩(wěn)定性和性能,Spring Cloud 中的 Ribbon 就是一種負(fù)載均衡的解決方案,本文將深入探討 Ribbon 的原理和在微服務(wù)中的應(yīng)用,需要的朋友可以參考下2024-02-02
Java輕松實(shí)現(xiàn)權(quán)限認(rèn)證管理的示例代碼
我們?cè)趯?shí)際開發(fā)中經(jīng)常會(huì)進(jìn)行權(quán)限認(rèn)證管理,給不同的人加上對(duì)應(yīng)的角色和權(quán)限,本文將實(shí)現(xiàn)一個(gè)簡(jiǎn)易的權(quán)限驗(yàn)證管理系統(tǒng),感興趣的小伙伴可以了解下2023-12-12
Springboot動(dòng)態(tài)配置AOP切點(diǎn)詳解
這篇文章主要介紹了Springboot動(dòng)態(tài)配置AOP切點(diǎn)詳解,Springboot 可以定義注解切點(diǎn)去攔截注解修飾的類方法以及execution(xxxx)切點(diǎn)去攔截具體的類方法,默認(rèn)情況下我們都會(huì)使用注解@PointCut去定義切點(diǎn),然后定義切面攔截切點(diǎn),需要的朋友可以參考下2023-09-09
JVM分配和回收堆外內(nèi)存的方式與注意點(diǎn)
JVM啟動(dòng)時(shí)分配的內(nèi)存稱為堆內(nèi)存,與之相對(duì)的,在代碼中還可以使用堆外內(nèi)存,比如Netty,廣泛使用了堆外內(nèi)存,下面這篇文章主要給大家介紹了關(guān)于JVM分配和回收堆外內(nèi)存的方式與注意點(diǎn),需要的朋友可以參考下2022-07-07

