springmvc第4天(rest风格,文件上传)

rest风格

1,介绍

rest风格是一种架构风格,相比传统的在地址栏后面?参数名=参数值不一样,参数全部是/参数值1/参数值2/...来实现的
好处:可读性更好,使得项目架构清晰,并且更有利于使用缓存,同时相比之前的问号带参,不需要再写参数名(不会暴露参数名),这样也相对安全

说明

页面跳转需要使用反斜杠
Controller需要参数的话,要在方法入参前加一个@PathVariable注解(),并且在RequertMapping(value=/路径/{参数名1})
@PathVariable:开启rest风格接收参数

@RequestMapping(value="/view/{id}",method = RequestMethod.GET)
	//@PathVariable:开启rest风格接收参数
	public String userView(@PathVariable String id,Model model) {

文件上传控制器

springmvc-servlet配置

<!--文件上传控制器  -->
		<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
			<!-- maxUploadSize:最大的上传字节数:单位:字节 -->
			<property name="maxUploadSize" value="500000"></property>
			<!-- 请求的编码格式,默认是iso8859-1,此处的设置必须和jsp页面上的pageEncoding一致 -->
			<property name="defaultEncoding" value="UTF-8"/>
		</bean>

前端页面添加标签

<!-- 上传证件照 -->
<div>
   <label for="id_picpath">证件照:</label>
   <input name="picpath" id="id_picpath" type="file"  value="">
</div>

controller中有文件上传的新增功能

//有文件上传的用户新增功能(上传到服务器当中>tomcat)
@RequestMapping("/usersave")
public String userSave(User user,HttpSession session,HttpServletRequest request,
		@RequestParam(value = "picpath",required = false) MultipartFile[] attach) {
	//1.在数据库表中添加id_picpath字段 2.在实体类中添加id_picpath属性
	String idPicpath=null;//图片的路径->往user对象中设置(用来保存数据的)
	String workPicpath=null;
	String errorInfo=null;
	boolean flag=true;//用来作为一个上传的开关
	//1.创建一个串串的文件夹->用来保存上传的图片/文件(如果是第一次上传,文件夹是不存在的)
	String path=session.getServletContext().getRealPath("statics"+File.separator+"uploadFile"); //获取当前项目的路径,并且新增一个文件夹
	//遍历图片数组
	for(int i=0;i<attach.length;i++) {
		if (!attach[i].isEmpty()) {//如果上传内容不为空,则进行相关的上传处理
			log.info("上传的路径是"+path);
			if(i==0) {
				errorInfo="uploadFileError";
			}
			if(i==1) {
				errorInfo="uploadWorkFileError";
			}
			//先获取上传原图片的名字和后缀
			String oldName=attach[i].getOriginalFilename();//获取原名字
			log.info("图片的原名是:"+oldName);
			String suffix=FilenameUtils.getExtension(oldName);//获取后缀
			log.info("图片的后缀是:"+suffix);
			//1.判断上传的图片大小是否符合要求
			int maxSize=300000;  //限制为300kb
			if (attach[i].getSize()>maxSize) {
				request.setAttribute("errorInfo", "图片大小不得超过300kb!!");
				flag=false;
				return "useradd";
				//equalsIgnoreCase:会自动忽略大小写
			}else if ("jpg".equalsIgnoreCase(suffix)||"png".equalsIgnoreCase(suffix)||"webp".equalsIgnoreCase(suffix)) {
				//创建新的图片名
				String fileName=System.currentTimeMillis()+"."+suffix;
				//
				File file=new File(path,fileName);
				if (!file.exists()) {
					file.mkdirs();
				}
				  try {
					  //正式上传:将attach上传到指定的file中
					attach[i].transferTo(file);
				} catch (Exception e) {
					e.printStackTrace();
					request.setAttribute("errorInfo", "上传失败");
					flag=false;
					return "useradd";
				} 
				  //将路径+新的图片名赋值给idPicpath变量
				  if(i==0) {
					  idPicpath=path+File.separator+fileName;
				  }
				  if(i==1) {
					  workPicpath=path+File.separator+fileName;
				  }
			}else {
				request.setAttribute("errorInfo", "图片格式不正确");
				flag=false;
				return "useradd";
			}		
		}
	}
	if(flag==true) {
		//log.info("进入到用户保存..."+user);
		int creatBy=((User)session.getAttribute("user")).getId();
		user.setCreatedBy(creatBy);
		//设置创建时间
		user.setCreationDate(new Date());
		//将idPicpath设置到user对象中
		user.setIdPicpath(idPicpath);
		//将workPicpath
		user.setWorkPicpath(workPicpath);
		int num=userService.addUser(user);
		if (num>0) {
			System.out.println("111");
			return "redirect:/user/userList";
		}
	}
	return "useradd";
}
posted @   不再犹豫27  阅读(80)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示