一,common文件上传
实现代码:
添加依赖:
<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.5</version>
</dependency>
在webmvc-config.xml里添加如下配置
<!-- 文件上传 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"/><!-- 默认编码ISO-8859-1 -->
<property name="maxInMemorySize" value="10240"/><!-- 最大内存 10M -->
<property name="uploadTempDir" value="/upload/" /><!-- 上传的文件名字 -->
<property name="maxUploadSize" value="-1" /><!-- 最大文件,-1不限制 -->
</bean>
创建控制类FileUploadController
package cn.xxs.controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.context.ServletContextAware;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class FileUploadController implements ServletContextAware {
private ServletContext servletContext;
@Override
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
@RequestMapping(value="user_upload")
public String imageEdit() {
return "user/user_upload";
}
@RequestMapping(value="imageUpload")
public String upload(@RequestParam("image") MultipartFile image,HttpServletResponse response,ModelMap map) throws IOException {
//获取存放文件在服务器中的路径
String path = servletContext.getRealPath("/upload");
//判断文件夹是否存在,不存在则创建
File file = new File(path);
if(!file.exists()) {
file.mkdirs();
}
//获取上传文件的文件名字
String imgName = image.getOriginalFilename();
//获取文件名字的后缀
String contextType = imgName.substring(imgName.lastIndexOf("."));
//创建新的文件名字
String newName = new Date().getTime()+contextType;
//声明输入流, 进行图片传输
InputStream is = image.getInputStream();
//指定输出图片的位置
OutputStream os = new FileOutputStream(new File(path+"\\"+newName));
//定义byte数组
byte[] buffer = new byte[1024];
int len = 0;
while((len=is.read(buffer))!=-1) {
os.write(buffer, 0, len);
os.flush();
}
os.close();
is.close();
//把上传的文件路径返回到页面
map.put("imgName", imgName);
map.put("path", "upload/"+newName);
return "user/uploadSuccess";
}
}
创建上传页面user_upload.jsp和上传成功页面uploadSuccess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="imageUpload" enctype="multipart/form-data" method="post">
请选择图片:<input type="file" name="image" />
<input type="submit" value="提交" />
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<img alt="${imgName }" src="/ssm_select/${path }">
</body>
</html>
上传成功后可在如下图路径下找到你上传的图片
二,common-net实现ftp文件上传
如果你想使用这种方式,你需要下载并安装如下图工具
可去此链接下载资源https://download.csdn.net/download/qq_43560721/11142121
在第一个里边进行操作
新建用户
设置密码:
ok,确定
add
edit--》setting--》查看port,默认是21
Windows+r cmd进入doc窗口
输入ipconfig命令得到host为192.168.1.34
实现代码:
添加依赖:
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>
FileUploadController.java
package cn.xxs.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketException;
import java.util.Date;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.net.ftp.FTPClient;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.context.ServletContextAware;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
@Controller
public class FileUploadController implements ServletContextAware {
private ServletContext servletContext;
@Override
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
@RequestMapping(value="user_upload")
public String imageEdit() {
return "user/user_upload";
}
@RequestMapping(value="ftpImgUpload")
public String ftpUpload(@RequestParam("image") CommonsMultipartFile image,
HttpServletResponse response,ModelMap map) {
String host = "192.168.1.34";
String username = "image";
String password = "image";
int port = 21;
//获取上传文件在服务器上的路径
//String realPath = servletContext.getRealPath("/upload");
//创建Ftp客户端
FTPClient ftp = new FTPClient();
//定义输入流
InputStream local = null;
try {
ftp.connect(host,port);
//登录Ftp
ftp.login(username, password);
//读取本地文件的路径
String realPath = servletContext.getRealPath("/upload");
String imgName = image.getOriginalFilename();
String fileType = imgName.substring(0, imgName.lastIndexOf("."));
String path = realPath + "/" + imgName;
/*//判断服务器中存放临时的文件夹是否存在
File file = new File(realPath);
if(!file.exists()) {
file.mkdirs();
}
//判断上传的文件在文件夹中是否存在
File f = new File(realPath);
if(f.exists()) {
f.delete();
}*/
//把图片拷贝到上传的路径中
File ff = new File(realPath,imgName);
image.transferTo(ff);
//上传图片
boolean flag = ftp.changeWorkingDirectory("/upload");
if(!flag==false) {
ftp.makeDirectory("/upload");
}
ftp.changeWorkingDirectory("/upload");
ftp.setBufferSize(1024);
ftp.setControlEncoding("utf-8");
//上传类型为二进制
ftp.setFileType(ftp.BINARY_FILE_TYPE);
//设置成被动模式
ftp.enterLocalPassiveMode();
local = new FileInputStream(ff);
ftp.storeFile(imgName, local);
map.put("path", "upload/"+imgName);
map.put("imgName", fileType);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
/*try {
local.close();
ftp.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
*/
}
return "user/ftpSuccess";
}
}
配置与第一种方式一样
创建文件上传页面user_upload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="ftpImgUpload" enctype="multipart/form-data" method="post">
请选择图片:<input type="file" name="image" />
<input type="submit" value="ftp提交" />
</form>
</body>
</html>
上传成功页面ftpSuccess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<img alt="${imgName }" src="/ssm_select/${path }">
</body>
</html>
上传成功后可在如下图路径下找到你上传的图片
两种方式最大的不同就是前者只能上传到当前项目下
后者可上传到自定义的路径下(使用copy来实现)