ssm框架实现文件上传(上传头像)

一、文件上传

1、表单元素,不能用实体类的属性命名

         上传的是文件,属性是字符串,保存文件名

         type为file

例如在user/insert.jsp下:

(1)type需要修改为"file"

(2) id="pic" name="pic",id和name不能用实体类的属性命名

<div class="form-group">
				<label for="" class="col-sm-2">用户头像</label>
				<div class="col-sm-10">
					<input type="file" id="pic" name="pic" placeholder="请输入用户头像"
						class="form-control" />
				</div>
			</div>

2、form表单设置属性----enctype="multipart/form-data"

        将文件以二进制的形式上传,这样可以实现多种类型的文件上传,可以上传头像等

<form id="form1" enctype="multipart/form-data" class="form-horizontal"
			action="users/insert" method="post">

3、controller处理文件上传

(1)MultipartFile是spring类型,org.springframework.web.mutipart包下的接口,代表HTML中form 表单方式上传的文件。名称要与传入的表单一致

(2)getOriginalFileName方法获取的是文件的完整名称(你传入的文件名称)

(3)字符串空值判断

        StringUtils.isEmpty(pic.getOriginalFilename())

        StringUtils----org.springframework.util.StringUtils;

(4)创建新的文件名

        UUID.randomUUID()随机生成一个32位字串----保证文件名的唯一性

(5)保存文件

        先获得文件的位置(服务器图片路径)

        request.getServletContext()----获得上下文(服务器项目).getRealPath--得到路径

(6)创建文件

        文件上传:pic.transferTo(new File(path, newFile))

        u.setUface(newFile)----传到uface头像属性

@RequestMapping("/insert")
	public String insert(Users u,MultipartFile pic){
		try {
			System.out.println(pic.getOriginalFilename());
			String fname = pic.getOriginalFilename();
			if (!StringUtils.isEmpty(pic.getOriginalFilename())) {
				//获取文件后缀名
				int i = fname.lastIndexOf(".");
				String suffix =fname.substring(i);
				//创建新的文件名
				String newFile = UUID.randomUUID() + suffix;
				//保证文件名的唯一性
				System.out.println(newFile);
				//保存文件
				//获取文件路径images(服务器图片路径)
				String path = request.getServletContext().getRealPath("/images");
				System.out.println("path:" + path);
				//创建文件
				pic.transferTo(new File(path, newFile));
				u.setUface(newFile);
			
			}
			//保存数据
			us.insert(u);
			System.out.println("插入成功");
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
				
		return "users/list";
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值