Springmvc学习-Springmvc07-文件的上传和下载

Springmvc07-文件的上传和下载

1. 多文件的上传(客户端上传至服务端)
  • 在spring里注册文件上传解析器。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd">

	<!-- 注册组件扫描器 -->
	<context:component-scan
		base-package="com.caorui.handlers"></context:component-scan>
	<!-- 注册注解驱动 -->
	<mvc:annotation-driven />
	<!-- 注册视图解析器 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/jsp/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
	<!-- 注册文件上传解析器 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="utf-8"></property>  <!-- 设置上传文件乱码的问题 -->
	</bean>
	<!-- 静态资源无法访问的第二种解决方案 -->
	<!-- <mvc:default-servlet-handler/> -->
	<!-- 静态资源无法访问的第三种解决方案 -->
	<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>

</beans>
  • jsp页面添加文件上传的表单
<form action="springmvc/fileUpload" method="post" enctype="multipart/form-data">
		<input type="file" name="imgs"><br>
		<input type="file" name="imgs"><br>
		<input type="submit" name="上传">
	</form>
  • 在controller中写服务端文件保存
package com.caorui.handlers;



import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

//后端控制器
@Controller //该注解表示将当前类给spring容器管理
@RequestMapping("/springmvc")//该注解起了限定范围的作用
public class MyController {

	@RequestMapping("/fileUpload")  
	public String fileUpload(@RequestParam MultipartFile[] imgs, HttpSession session) { //spring自带类型转换 提交的表单name值和方法的参数值一致才能接受,不一致不能接受
		String path = session.getServletContext().getRealPath("/");
		System.out.println(path);
		for (MultipartFile img : imgs) {
			String fileName = img.getOriginalFilename();
			File file = new File(path, fileName);
			try {
				img.transferTo(file);
			} catch (IllegalStateException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		}

		return "welcome";
	}

}


2. 多文件的下载(客户端从服务端下载)
  • 不需要指定文件上传解析器
  • jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<a href="${pageContext.request.contextPath}/springmvc/fileDownload">点击下载!</a>
</body>
</html>
  • controller
package com.caorui.handlers;



import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.servlet.http.HttpSession;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

//后端控制器
@Controller //该注解表示将当前类给spring容器管理
@RequestMapping("/springmvc")//该注解起了限定范围的作用
public class MyController {

	@RequestMapping("/fileDownload")  
	public ResponseEntity<byte[]> fileDownload() throws IOException{
		//指定下载文件
		File file = new File("d:/美女.png");
		FileInputStream is = new FileInputStream(file);
		//创建字节数组,并且设置数组大小为预估文件字节数
		byte[] body = new byte[is.available()];
		//将输入流中的字符存储到缓存数组中
		is.read(body);
		//获取下载显示的文件名, 并且解决中文乱码的问题
		String name = file.getName();
		String downLoadFileName = new String(name.getBytes("utf-8"), "ISO-8859-1");
		//设置http响应头的信息,并且通知浏览器一以附件的形式进行下载
		HttpHeaders httpHeaders = new HttpHeaders();
		httpHeaders.add("Content-Disposition", "attachment;filename="+downLoadFileName);
		//设置http响应状态信息
		HttpStatus status = HttpStatus.OK;
		ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(body, httpHeaders, status);
		return responseEntity;
		
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值