ssm文件上传两种方式详解

一,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来实现)

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值