摘要://如果它是一个动态值,请使用onUploadStart()中的settingss()方法更改JSON值/*“formData”:{//您不能写“user.username”:“”,“user.age”:“},*/“UploadStart”:函数{$uploadify;/*{'user.username':name,'user.age‘:age});*/}//Flash“swf”:“/uploadify/uploadify.swf”,//文件选择后容器div的ID值为“queueID”:“uploadfileQueue”,//要上载的文件对象的名称必须与后台控制器“fileObjName”:“headerImage”中捕获的文件名一致,//上载地址访问后台操作路径“uploader”:“/photosAction/uploadFile。do',//浏览要上载文件的按钮的背景图像路径//'buttonImage':'/uploadify/background Jpg',//浏览按钮的宽度“width”:“100”,//浏览键的高度“height”:“32”,//在浏览窗口底部的文件类型下拉菜单中显示文本“fileTypeDesc”:“支持的格式:”,//允许的文件后缀“fileTypeExts”:“*”。jpg;*jpge;*。gif;*。Png',//它们是什么??达到或超过此数字时,将触发onSelectError事件。“);break;case 110:alert(”文件的大小[“+file.name+”]超过了“+$('#file_upload').uploadify('settings','fileSizeLimit')+”系统的大小限制!
一 : applicationContext.xml中:必须声明不然获取不到
<!-- 上传文件的配置 -->
<bean
id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="1024000"></property>
<property name="defaultEncoding" value="utf-8"/><!--属性:编码-->
</bean>
二 : 前台jsp页面
<!-- //存放选择文件的 图片按钮的 Div -->
<div id="uploadfileQueue"></div>
<input type="file" id="file_upload">
<img />
<input type="text" name="user_img" >
三 : js代码:
$(document).ready(function() {
$("#file_upload").uploadify({
//是否自动上传 true or false
'auto':true,
//超时时间上传成功后,将等待服务器的响应时间。
//在此时间后,若服务器未响应,则默认为成功(因为已经上传,等待服务器的响应) 单位:秒
'successTimeout':99999,
//附带值 JSON对象数据,将与每个文件一起发送至服务器端。
//如果为动态值,请在onUploadStart()中使用settings()方法更改该JSON值
/* 'formData':{ //可以不写
'user.username':'',
'user.age':''
}, */
'onUploadStart': function(file) {
$("#file_upload").uploadify(
"settings"
);
/* {'user.username':name,'user.age':age});*/
},
//flash
'swf': "<%=request.getContextPath()%>/uploadify/uploadify.swf",
//文件选择后的容器div的id值
'queueID':'uploadfileQueue',
//将要上传的文件对象的名称 必须与后台controller中抓取的文件名保持一致
'fileObjName':'headerImage',
//上传地址访问后台action路径
'uploader':'<%=request.getContextPath()%>/photosAction/uploadFile.do',
//浏览将要上传文件按钮的背景图片路径
//'buttonImage':'<%=request.getContextPath()%>/uplodify/background.jpg',
//浏览按钮的宽度
'width':'100',
//浏览按钮的高度
'height':'32',
//在浏览窗口底部的文件类型下拉菜单中显示的文本
'fileTypeDesc':'支持的格式:',
//允许上传的文件后缀
'fileTypeExts':'*.jpg;*.jpge;*.gif;*.png', //有哪些??
/*上传文件的大小限制允许上传文件的最大 大小。 这个值可以是一个数字或字 符串。
如果它是一个字符串,它接受一个单位(B, KB, MB, or GB)。
默认单位为KB您可以将此值设置为0 ,没有限制,
单个文件不允许超过所设置的值 如果超过 onSelectError时间被触发*/
'fileSizeLimit':'1024KB',
'buttonText': '上传头像',
//允许上传的文件的最大数量。当达到或超过这个数字,onSelectError事件被触发。
'queueSizeLimit' : -1,
//选择上传文件后调用
'onSelect' : function(file) {
// alert("123");
},
//返回一个错误,选择文件的时候触发
'onSelectError':function(file, errorCode, errorMsg){
switch(errorCode) {
case -100:
alert("上传的文件数量已经超出系统限制的"
+$('#file_upload').uploadify('settings','queueSizeLimit')+"个文件!");
break;
case -110:
alert("文件 ["+file.name+"] 大小超出系统限制的"
+$('#file_upload').uploadify('settings','fileSizeLimit')+"大小!");
break;
case -120:
alert("文件 ["+file.name+"] 大小异常!");
break;
case -130:
alert("文件 ["+file.name+"] 类型不正确!");
break;
}
},
//上传到服务器,服务器返回相应信息到data里
'onUploadSuccess':function(file, data, response){
//alert(data);
$("#add_img").attr("src","<%=request.getContextPath()%>/"+data)
//alert("<%=request.getContextPath()%>/"+data)
$("[name='user_img']").val(data)
},
//当单个文件上传出错时触发
'onUploadError': function (file, errorCode, errorMsg, errorString) {
alert("上传失败");
}
});
});
四 ; controller:
@RequestMapping(value="/uploadFile",method=RequestMethod.POST)
@ResponseBody
public void uploadFile(@RequestParam("headerImage")CommonsMultipartFile headerImage,HttpServletRequest req,HttpServletResponse response) throws IOException{
String path = FileUtil.upFile(headerImage,req,response,"pppp");
try {
response.setCharacterEncoding("utf-8");
response.getWriter().write(path);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
注意:有时候需要使用到File类型的文件
那么就需要将CommonsMultipartFile 类型的转换为
File类型的
DiskFileItem fi = (DiskFileItem)image.getFileItem();
File file = fi.getStoreLocation();
二 : 使用MultipartFile上传文件(多文件)
Controller层:
@RequestMapping("filesUpload")
public String filesUpload(@RequestParam("files") MultipartFile[] files) {
//判断file数组不能为空并且长度大于0
if(files!=null&&files.length>0){
//循环获取file数组中得文件
for(int i = 0;i<files.length;i++){
MultipartFile file = files[i];
//保存文件
saveFile(file);
}
}
// 重定向
return "redirect:/list.html";
}
上传文件
private boolean saveFile(MultipartFile file) {
// 判断文件是否为空
if (!file.isEmpty()) {
try {
// 文件保存路径
String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/"
+ file.getOriginalFilename();
// 转存文件
file.transferTo(new File(filePath));
return true;
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
SpringMVC 中,文件的上传,是通过 MultipartResolver 实现的。 所以,如果要实现文件的上传,只要在 spring-mvc.xml 中注册相应的 MultipartResolver 即可。
MultipartResolver 的实现类有两个:
CommonsMultipartResolver
StandardServletMultipartResolver
两个的区别:
第一个需要使用 Apache 的 commons-fileupload 等 jar 包支持,但它能在比较旧的 servlet 版本中使用。
第二个不需要第三方 jar 包支持,它使用 servlet 内置的上传功能,但是只能在 Servlet 3 以上的版本使用。
第一个使用步骤:
/*CommonsMultipartResolver 上传用到的两个包*/
"commons-fileupload:commons-fileupload:1.3.1",
"commons-io:commons-io:2.4"
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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 开启mvc-->
<mvc:annotation-driven/>
<!-- 配置扫描发现所有具有 @Controller 注解的类,加载到容器 -->
<context:component-scan base-package="text1"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp"/>
</bean>
<!--1 CommonsMultipartResolver
第一个需要使用 Apache 的 commons-fileupload 等 jar 包支持,
但它能在比较旧的 servlet 版本中使用-->
<!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" />
<property name="maxUploadSize" value="10485760000" />
<property name="maxInMemorySize" value="40960" />
</bean>
</beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:Spring_mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
imgTest .java
java
package text1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
@Controller
@RequestMapping("/create")
public class imgTest {
@Autowired
private HttpServletRequest request;
@RequestMapping("/jq")
public String jq() {
System.out.println("oooo");
return "index";
}
@RequestMapping("/upload")
public String upload(MultipartFile[] mfile) throws IOException {
if (mfile !=null && mfile.length>0) {
for (int i = 0;i<mfile.length;i++){
long start = System.currentTimeMillis();
System.out.println("-------------------------------------------------");
System.out.println("获取文件流"+mfile[i].getInputStream());
System.out.println("获取文件的字节大小【byte】"+mfile[i].getSize());
System.out.println("文件类型"+mfile[i].getContentType());
System.out.println("获取文件数据"+mfile[i].getBytes());
System.out.println("文件名字"+mfile[i].getName());
System.out.println("获取上传文件的原名"+mfile[i].getOriginalFilename());
System.out.println("-------------------------------------------------");
try {
String filePath = request.getSession().getServletContext()
.getRealPath("/") + "assets/" +start+ mfile[i].getOriginalFilename();
//转存文件
mfile[i].transferTo(new File(filePath));
}catch (Exception e){
e.printStackTrace();
}
//mfile[i].transferTo(new File("D:/ideas/"+mfile[i].getOriginalFilename()+ mfile[i].getOriginalFilename().substring(
// mfile[i].getOriginalFilename().lastIndexOf("."))));
// System.out.println(mfile.getOriginalFilename());
// mfile[i].transferTo(new File("/assets" + mfile[i].getOriginalFilename()));
} return "cg";
} else {
System.out.println("失败");
return "sb";
}
}
}
html:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form:form action="/create/upload" enctype="multipart/form-data">
<input type="file" name="mfile" /><br>
<input type="file" name="mfile" />
<%--<img src="https://tool.4xseo.com/article/270141.html" >--%>
<input type="submit" value="上传图片" />
</form:form>
</body>
</html>
第二个使用步骤: 这个就不要导包---建议用这个
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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 开启mvc-->
<mvc:annotation-driven/>
<!-- 配置扫描发现所有具有 @Controller 注解的类,加载到容器 -->
<context:component-scan base-package="text1"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp"/>
</bean>
<!--2 注册上传 StandardServletMultipartResolver
第二个不需要第三方 jar 包支持,它使用 servlet 内置的上传功能,
但是只能在 Servlet 3 以上的版本使用。
-->
<bean class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
</bean>
</beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:Spring_mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<multipart-config>
<!-- 上传文件的大小限制,比如下面表示 5 M -->
<max-file-size>5242880</max-file-size>
<!-- 一次表单提交中文件的大小限制,必须下面代表 10 M -->
<max-request-size>10485760</max-request-size>
<!-- 多大的文件会被自动保存到硬盘上。0 代表所有 -->
<file-size-threshold>0</file-size-threshold>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
其他的都是一样的。
imgTest .java 和html 这个代码都是和上面的不变!