SpringMVC文件上传下载

SpringMVC文件上传下载

文件上传的流程:

前台要求:

​ 1、提交方式必须是post

​ 2、input类型必须是file类型

​ 3、还要加一个重要表单参数:encType属性值为:multipart/form-data

<form action="/system/slide/save" method="post" class="form-horizontal" id="saveForm" enctype="multipart/form-data">
							<input type="hidden" name="id" id="fomHide">
								<div class="form-group row">
									<label for="file" class="control-label col-md-3">选择</label>
									<div class="col-md-9">
										<input id="input"  class="form-control" type="file" name="file" >
									</div>
								</div>
						                <div class="form-group row">
						                  	<label for="enable" class="control-label col-md-3" >是否启用</label>
						                  	<div class="col-md-9">
						                    	<div class="form-check">
						                      		<label class="form-check-label">
						                        		<input class="form-check-input" type="radio" checked="checked" id="enable" name="enable" value="1">启用
						                      		</label>
						                    	</div>
						                    	<div class="form-check">
						                      		<label class="form-check-label">
						                        		<input class="form-check-input" type="radio" name="enable" value="0">禁用
						                      		</label>
						                    	</div>
						                  	</div>
						                </div>
						             </form>

后台接收文件参数:

​ 使用Multpartfile接收文件

​ 注:要和前台的name名称一致,否则不饿能上传

@RequestMapping("/save")
	@ResponseBody
	public OptionResult save(Slide slide,MultipartFile file,HttpServletRequest request){
		try {
			sSrvice.save(slide,file,request);
			return new OptionResult();
		} catch (Exception e) {
			e.getMessage();
			return new OptionResult(false, "保存失败");
			
		}
		
	}

multipart/form-data表示提交的数据,以多段(一个表单项就是一个数据段)的形式进行拼接,以二进制流的形式发送给服务器

服务器配置:

​ springMVC核心配置文件配置一个文件上传解析器

<!-- 配置文件上传解析器 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="10485760"></property>
	</bean>

上传核心:需要依赖commons-fileupload.jar和commons-io

后台在文件上传的时候,应该优先判断上传的文件是否存在,和要上传的文件夹是否已经生成,保证在动态的情况下,服务器也能够将文件成功上传

@Override
	public void save(Slide slide, MultipartFile file, HttpServletRequest request)
			throws IOException {
		// 保存修改涉及文件上传
		// 判断文件对象是否为空

		// 文件上传操作
		String path = request.getServletContext().getRealPath("/upload");
		File file2 = new File(path);
		if (file != null) {
			// 判断上传的位置是否存在
			if (!file2.exists()) {
				file2.mkdirs();
			}
			// 获得输入流
			InputStream in = file.getInputStream();
			String sName = file.getOriginalFilename();
			// 获得文件后缀
			String suffix = sName.substring(sName.lastIndexOf("."));
			System.out.println(suffix);
			long millis = System.currentTimeMillis();
			// 新的文件名字
			String newStringFileName = millis + suffix;
			// 将新名字设置到对象中
			slide.setName(newStringFileName);
			// 新建文件对象
			File file3 = new File(file2, newStringFileName); // 输出的位置文件对象
			FileOutputStream on = new FileOutputStream(file3);
			// 将路径设置到对象中
			slide.setPath("/upload/" + newStringFileName);
			// 上传核心
			IOUtils.copy(in, on);
			on.close();
			in.close();

		}

文件上传管理:可能会重新上传文件,如果是这样,那么我们就应该先将已有的源文件删除掉,在进行上传更新数据,不删除原来的文件,事件久了数据量大了操作频繁之后,服务器内部就会数据堆积,容易崩塌

,修改的时候也要注意sql的动态拼接问题,避免内部错误

<update id="update">
	update t_slide set 
	<if test="name != null and !''.equals(name.trim())">
	name = #{name},path=#{path},
	</if>
	createDate=#{createDate},enable=#{enable}
	where id = #{id}
	</update>

文件下载,和上传大致上一致的,只是要注意下载文件中文名不显示的问题,还要设置响应头信息,告诉浏览器,是需要进行下载操作

大概思路:浏览器发送请求,告诉服务器到底要下载哪一个文件,然后,服务器读取需要下载的文件内容,然后回传,在之前做一些设置

response.setHeader(“Content-Disposition”, “attachment; fileName=1.jpg”);
这个响应头告诉浏览器。这是需要下载的。而 attachment 表示附件,也就是下载的一个文件。fileName=后面, 表示下载的文件名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值