springmvc文件上传
作者:互联网
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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<context:component-scan base-package="com.sy"></context:component-scan>
<mvc:annotation-driven/>
<!--
由于在SpringMVC的前端控制器中,将url-pattern设置为了/
此时前端控制器不仅会处理Controller中的请求,也会讲静态资源
当作时Controller请求进行处理,这个是不正确的
所以通过该配置,可以让静态资源直接放行,控制器请请求在此处才被前端控制器处理
-->
<mvc:default-servlet-handler/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--
注册文件上传组件
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--
多文件上传时每个文件的大小上限(单位:字节)
-->
<!--<property name="maxUploadSizePerFile" value=""></property>-->
<!--
所有文件上传时的总大小上限(单位:字节)
因为mvc框架内部规范了上传命名,所以bean id一定要写成multipartResolver
-->
<property name="maxUploadSize" value="10485760"></property>
</bean>
</beans>
上传文件的包依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sy</groupId>
<artifactId>SpringMVC_0315</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.18</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.24.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.24.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8888</port>
<path>/</path>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
controller层代码
package com.sy.controller;
import com.sy.dto.Result;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
@Controller
@RequestMapping("upload")
public class UploadController {
/**
* 文件上传目录的路径
* TODO:可以配置在properties中,通过@Value注解注入
*/
private static final String UPLOAD_DIR = "d:\\imgs\\";
/**
* 使用表单方式上传文件
*
* @param file 上传的文件对象,参数名必须和前端file组件的name保持一致
* @return
*/
@RequestMapping("formUpload")
public String formUpload(@RequestParam(value = "file") MultipartFile file) {
//文件的大小
// System.out.println(file.getSize());
//文件的原始名称
//System.out.println(file.getOriginalFilename());
//前端页面中文件域的名称
//System.out.println(file.getName());
//文件对应的输入流
//System.out.println(file.getInputStream());
//1.判断保存上传文件的目录是否存在,如果不存在,则创建之
File saveDir = new File(UPLOAD_DIR);
if (!saveDir.exists()) {
saveDir.mkdirs();
}
//2.构建保存时文件的文件名:uuid+.+原来文件的类型
String oldFileName = file.getOriginalFilename();
String newFileName = UUID.randomUUID().toString().replace("-", "") + "."
+ oldFileName.substring(oldFileName.lastIndexOf(".") + 1);
//3.将上传以后的文件对应的输入流拷贝到服务器文件对应的输出流
// --文件上传的本质
try (InputStream is = file.getInputStream();
OutputStream os = new FileOutputStream(UPLOAD_DIR + newFileName);
) {
FileCopyUtils.copy(is, os);
} catch (IOException e) {
e.printStackTrace();
}
return "hello";
}
/**
* 基于表单的多文件上传
* 注意:如果是多个文件,则将其设置为数组类型
*/
@RequestMapping("formUploadSeveral")
public String formUploadSeveral(@RequestParam(value = "file") MultipartFile[] file) {
if (file != null) {
for (MultipartFile f : file) {
//1.判断保存上传文件的目录是否存在,如果不存在,则创建之
File saveDir = new File(UPLOAD_DIR);
if (!saveDir.exists()) {
saveDir.mkdirs();
}
//2.构建保存时文件的文件名:uuid+.+原来文件的类型
String oldFileName = f.getOriginalFilename();
String newFileName = UUID.randomUUID().toString().replace("-", "") + "."
+ oldFileName.substring(oldFileName.lastIndexOf(".") + 1);
//3.将上传以后的文件对应的输入流拷贝到服务器文件对应的输出流
// --文件上传的本质
try (InputStream is = f.getInputStream();
OutputStream os = new FileOutputStream(UPLOAD_DIR + newFileName);
) {
FileCopyUtils.copy(is, os);
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "hello";
}
/**
* ajax上传
*/
@RequestMapping("ajaxUpload")
@ResponseBody
public Result ajaxUpload(@RequestParam("file") MultipartFile file) {
Result result = new Result();
//1.判断保存上传文件的目录是否存在,如果不存在,则创建之
File saveDir = new File(UPLOAD_DIR);
if (!saveDir.exists()) {
saveDir.mkdirs();
}
//2.构建保存时文件的文件名:uuid+.+原来文件的类型
String oldFileName = file.getOriginalFilename();
String newFileName = UUID.randomUUID().toString().replace("-", "") + "."
+ oldFileName.substring(oldFileName.lastIndexOf(".") + 1);
//3.将上传以后的文件对应的输入流拷贝到服务器文件对应的输出流
// --文件上传的本质
try (InputStream is = file.getInputStream();
OutputStream os = new FileOutputStream(UPLOAD_DIR + newFileName);
) {
FileCopyUtils.copy(is, os);
} catch (Exception e) {
result.setCode(500);
result.setError("文件上传出错");
e.printStackTrace();
}
//TODO:如果成功上传,可以在json中携带用来显示图片的url路径
// result.setData("路径");
return result;
}
}
前端测试(一定要写上enctype=“multipart/form-data”)
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/8/12
Time: 10:12
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>上传</title>
</head>
<body>
<form action="<%=request.getContextPath()%>/upload/formUpload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
<hr/>
<form action="<%=request.getContextPath()%>/upload/formUploadSeveral" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="file" name="file">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
</body>
</html>
ajax测试
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>基于Ajax进行文件上传</title>
<link rel="stylesheet" href="/layui/css/layui.css" media="all">
<script type="text/javascript" src="/layui/layui.js"></script>
</head>
<body>
<button type="button" class="layui-btn" id="test1">
<i class="layui-icon"></i>上传图片
</button>
</body>
<script>
var serverPath = "http://localhost:8888/";
layui.use('upload', function () {
var upload = layui.upload;
//执行实例
var uploadInst = upload.render({
elem: '#test1' //绑定元素
, url: serverPath + 'upload/ajaxUpload' //上传接口
, done: function (res) {
//上传完毕回调
console.log(res);
}
, error: function () {
//请求异常回调
}
});
});
</script>
</html>
标签:文件,springmvc,saveDir,file,import,org,上传 来源: https://blog.csdn.net/weixin_43343423/article/details/99295429