spring mvc框架上传图片文件

本文介绍如何在SpringMVC框架中实现文件上传功能,并详细展示了配置过程及XML配置示例。同时,文章还讲解了如何利用MyBatis进行数据库的插入和分页查询操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、导入相关包


2、配置xml文件

<!-- 配置上传组件 -->
	<bean id="multipartResolver"  
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
        <!-- 上传文件大小上限,单位为字节(10MB) -->
        <property name="maxUploadSize">  
            <value>10485760</value>  
        </property>  
        <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
        <property name="defaultEncoding">
            <value>UTF-8</value>
        </property>
    </bean>

3、新建对象,提供get和set方法


4、Mapper文件中的映射关系及sql语句

映射关系

<resultMap type="Book" id="bookMap">
  <result column="isbn" property="isbn"/>
	  	<result column="book_name" property="bookName"/>
	  	<result column="price" property="price"/>
	  	<result column="publish_date" property="publishDate"/>
	  	<result column="book_image" property="bookImage"/>
	  	<result column="publisher" property="publisher"/>
	  	
	  	<!-- <result column="category_id" property="category.id"/> -->
	  	<association property="category" column="category_id" 
	  					javaType="Category" select="selectCategoryBook">
	  	</association>
  </resultMap>

insert语句

 <insert id="addBook" parameterType="Book">
        insert into book
        values(#{isbn},#{bookName},#{price},#{bookImage},#{publishDate},#{publisher},#{category.id})
    </insert>

查询语句(分页查询,具体看分页查询博客)

  <select id="countForPager" parameterType="Pager" resultType="int">
	  select count(isbn) from book
	  <where>
		  <if test="param !=null and param.bookName !=null">
		  book_name like concat(concat("%",#{param.bookName}),"%")
		  </if>
		  
		  <!-- 查询条件中的小于号或者大于号可以使用转义符号进行编写:小于 (<) ; 大于 (>) 
		  		或者使用cdata标号进行标志
		   -->
		  <if test="param !=null and param.price !=0.0">
		  price <= param.price
			<!--   <![CDATA[price <= param.price]]> -->
			<!--   price<![CDATA[<]]>= param.price -->
		  </if>
	  </where>
  </select>

5、controller部分

	@RequestMapping("/doadd")
	//spring mvc可以把表单或url参数封装到一个对象中
	//spring mvc可以把参数转换成基本数据类型,并封装到对象中
	public String addBook(Model model,@Validated Book book,BindingResult result,MultipartFile file1,HttpServletRequest request) throws IllegalStateException, IOException {
		//(网页)客户端提交数据到spring mvc后,会先进行数据的封装与转换,数据校验,完成后再进行控制器类进行处理
		//可以使用校验框架进行数据的集中校验,并获取校验结果,根据校验结果,进行跳转控制
		if (result.hasErrors()) {
			//去除所有的校验错误或字段校验错误
			List<ObjectError> errors = result.getAllErrors();
			
			for(ObjectError error :errors) {
				logger.debug(error.getObjectName());
			}
			
			//把异常信息传回页面进行显示
			model.addAttribute("errors", errors);
			return "addbook";
			
		}
		
		//通过表单验证后,执行上传
		//如果文件不位空,写入上传路径
		 if(!file1.isEmpty()) {
	            //上传文件路径
	            String path = request.getServletContext().getRealPath("/uploads/");
	            //上传文件名
	            String filename = file1.getOriginalFilename();
	            String fileExt = filename.substring(filename.lastIndexOf("."));
	            String uuid = UUID.randomUUID().toString();//随机UUID文件名
	            
	            String newFile = uuid + fileExt;
	            File filepath = new File(path,newFile);
	            logger.info(newFile);
	            logger.info(filepath.getAbsolutePath());
	            
	            //判断路径是否存在,如果不存在就创建一个
	            if (!filepath.getParentFile().exists()) { 
	                filepath.getParentFile().mkdirs();
	            }
	            //将上传文件保存到一个目标文件当中
	            file1.transferTo(new File(path + File.separator + newFile));
	            
	            //上传成功,保存上传后的文件路径到book对象中,在调用业务类保存到数据库中
	            book.setBookImage("uploads/"+ newFile);
	        } 
		
//		boolean r = new Random().nextInt(10)%2==1?true:false;
//		if (r) 
//			throw new NullPointerException("模拟空指针异常");
		
		boolean ret = IBookService.addBook(book);
		
		//接收表单处理后,如果使用请求转发进行跳转会产生表单重复提交问题(刷新页面会重复提交)
		//为了解决表单重复提交,在处理更新操作后,一般会执行重定向跳转
		
		if (ret) {
//			return "forward:/book/list.action";
			return "redirect:/book/list.action";
		}else {
//			return "forward:/book/add.action";
			return "redirect:/book/list.action";
		}
	}

6、页面部分

上传部分

<tr>
	<td>封面图片:</td>
	<!-- 文件上传时,文件域的名称不要与对象名一致,因为它们的类型不一致 ,spring mvc无法完成-->
	<td><input name="file1" type="file" /></td>
</tr>

显示部分

<td><img height="60" alt="封面图片" src="${book.bookImage }"></td>

注意:照片上传到云服务器,本地路径为

D:\lsworkspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\BookStoreWeb\uploads




资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 在本文中,我们将探讨如何通过 Vue.js 实现一个带有动画效果的“回到顶部”功能。Vue.js 是一款用于构建用户界面的流行 JavaScript 框架,其组件化和响应式设计让实现这种交互功能变得十分便捷。 首先,我们来分析 HTML 代码。在这个示例中,存在一个 ID 为 back-to-top 的 div 元素,其中包含两个 span 标签,分别显示“回到”和“顶部”文字。该 div 元素绑定了 Vue.js 的 @click 事件处理器 backToTop,用于处理点击事件,同时还绑定了 v-show 指令来控制按钮的显示与隐藏。v-cloak 指令的作用是在 Vue 实例渲染完成之前隐藏该元素,避免出现闪烁现象。 CSS 部分(backTop.css)主要负责样式设计。它首先清除了一些默认的边距和填充,对 html 和 body 进行了全屏布局,并设置了相对定位。.back-to-top 类则定义了“回到顶部”按钮的样式,包括其位置、圆角、阴影、填充以及悬停时背景颜色的变化。此外,与 v-cloak 相关的 CSS 确保在 Vue 实例加载过程中隐藏该元素。每个 .page 类代表一个页面,每个页面的高度设置为 400px,用于模拟多页面的滚动效果。 接下来是 JavaScript 部分(backTop.js)。在这里,我们创建了一个 Vue 实例。实例的 el 属性指定 Vue 将挂载到的 DOM 元素(#back-to-top)。data 对象中包含三个属性:backTopShow 用于控制按钮的显示状态;backTopAllow 用于防止用户快速连续点击;backSeconds 定义了回到顶部所需的时间;showPx 则规定了滚动多少像素后显示“回到顶部”按钮。 在 V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值