JAVA 框架-Springmvc-文件上传与下载

需要的包:spring的21个包,commons-fileupload/io/logging的三个包,标准标签库2个包

异常处理:如果报BeanCreationException: Lookup method resolution failed 可能是缺少必须的包;

spring-servlet.xml配置:

<?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"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.hanqi.controller"></context:component-scan><!--注解扫描器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 视图解析器 -->
	<property name="prefix" value="/WEB-INF/page/"></property>
	<property name="suffix" value=".jsp"></property>
</bean>
<!--配置spring里带的文件上传类-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<!-- 可以上传的文件的总大小, 单位(b), 1KB=1024b -->
	<property name="maxUploadSize" value="1000000000"></property>
	<!-- 可以上传的单个文件的大小, 单位(b) -->
	<property name="maxUploadSizePerFile" value="100000000"></property>
	<!-- 默认的字符集 -->
	<property name="defaultEncoding" value="UTF-8"></property>
</bean>
</beans>

文件上传页:

<%@ 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>上传文件页面</title>
</head>
<body>
<form action="file/upload.do" method="post" enctype="multipart/form-data">
	<input type="file" name="file" ><br>
	<input type="submit" value="提交">
</form><br>
<a href="${pageContext.request.contextPath }/download.do">查看上传文件</a>
</body>
</html>

文件下载页:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!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>下载文件页面</title>
</head>
<body>
<a href="index.jsp">上传文件</a><br>
<!--第一种下载方式,直接加上download属性即可,仅支持火狐和谷歌浏览器-->
<c:forEach items="${fileList}" var="f">
	<a href="files/${f}" download>${f }</a><br>
</c:forEach>
<!--第二种下载方式,将文件名作为请求参数传入后台-->
<c:forEach items="${fileList}" var="f">
	<a href="file/download.do?filename=${f }">${f }</a><br>
</c:forEach>
</body>
</html>

文件控制器类:

package com.hanqi.controller;

import java.io.File;
import java.io.IOException;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

@Controller
@RequestMapping("/file")
public class FileController {
	@RequestMapping("/upload")
	public String upload(MultipartFile file,HttpServletRequest request) {
		System.out.println(file.getName());// input控件中name属性的值
		System.out.println(file.getSize()); // 文件大小
		System.out.println(file.getOriginalFilename());// 文件名
		//在WebContent下新建一个files文件夹,并获取其物理路径
		String path = request.getServletContext().getRealPath("/files");
		//新建一个空的文件,File.separator相当于"/",同时加上一个时间戳,用于区分相同名字的文件
		File orgFile = new File(path + File.separator + new Date().getTime()+"-" + file.getOriginalFilename());
		try {
			//将接收到的文件放到空的文件中
			//该文件实际存放在D:\eclipse workspace\.metadata\.plugins\org.eclipse.wst.server.core
			//\tmp0\wtpwebapps\spring-file\files
			file.transferTo(orgFile);
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return "success";
	}
	@RequestMapping("/download")
	public ResponseEntity<byte[]> testDownLoad(
			HttpServletRequest request,
			String filename) throws Exception {
		// String orgFilename = new String(filename.getBytes("iso-8859-1"), "utf-8");
		String path =
				request.getServletContext().getRealPath("/files");
		// File orgFile = new File(path + "/" + orgFilename);
		File orgFile = new File(path + "/" + filename);
		// 设置请求头信息
		HttpHeaders hh = new HttpHeaders();
		// 告诉前台, 以(attachement, 就是下载)的方式打开文件
		hh.setContentDispositionFormData("attachment", new String(filename.getBytes("utf-8"), "iso-8859-1"));
		// 以二进制流的形式传输文件, 这是最常见的下载方式
		hh.setContentType(MediaType.APPLICATION_OCTET_STREAM);
		return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(orgFile), hh,
				HttpStatus.CREATED);
	}
}

页面跳转控制类:

package com.hanqi.controller;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class FormController {
	@RequestMapping("/{path}")
	public String toPage(@PathVariable("path")String page,Model model,HttpServletRequest request) {
		if("download".equals(page)) {
			String path = request.getServletContext().getRealPath("/files");
			File orgFiles = new File(path);
			File[] files = orgFiles.listFiles();
			List fileList = new ArrayList();
			for(File f:files) {
				fileList.add(f.getName());
			}
			model.addAttribute("fileList", fileList);
		}
		return page;
	}
}

原文地址:https://www.cnblogs.com/wyc1991/p/9276022.html

时间: 2024-10-12 06:23:50

JAVA 框架-Springmvc-文件上传与下载的相关文章

笨鸟先飞之Java(一)--使用struts2框架实现文件上传和下载

不管是.net还是Java,我们最常接触到的就是文件的上传和下载功能,在Java里要实现这两个常用功能会有很多种解决方式,但是struts2的框架却能给我们一个比较简单的方式,下面就一起来看吧: 文件上传: 首先来看实现上传功能的表单,Index.jsp: <span style="font-family:FangSong_GB2312;font-size:18px;"><%@ page language="java" contentType=&q

SpringMvc文件上传和下载

本篇博客将讲解的是Springmvc的文件上传和下载功能.对于上传功能,我们在项目中是经常会用到的,比如用户注册的时候,上传用户头像,这个时候就会使用到上传的功能.而对于下载,使用场景也很常见,比如我们项目中有个使用说明是是pdf版的,会提供给用户进行下载的功能.相对于来说,这两个功能都是很常见,废话不多说,按照惯例,我们先来看一下本篇博客的目录. 目录 一:搭建SpringMvc开发环境 二:实现文件上传的功能 三:将上传文件绑定到具体的对象上 四 : 实现用户下载的功能 五:总结 一:搭建S

SpringMVC文件上传和下载的实现

SpringMVC通过MultipartResolver(多部件解析器)对象实现对文件上传的支持. MultipartResolver是一个接口对象,需要通过它的实现类CommonsMultipartResolver来完成文件的上传工作. 1.使用MultipartResolver对象,在XML中配置Bean. 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://

java里面的文件上传与下载

文件的上传与下载主要用到两种方法:1.方法一:commons-fileupload.jar commons-io.jarapache的commons-fileupload实现文件上传,下载 [upload]package com.handson.bbs.servlet; import java.io.File;import java.io.IOException;import java.util.Date;import java.util.List;import javax.servlet.Se

【Java】JavaWeb文件上传和下载

文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件上传功能.common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载.用该组件可实现一次上传一个或多个文件,并可限制文件大小. 开发环境 创建一个javaweb项目,加入common-f

Java实现FTP文件上传与下载

实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 package com.cloudpower.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import sun.net.Telnet

springMVC文件上传与下载(六)

1..文件上传 在springmvc.xml中配置文件上传解析器 <!-- 上传图片配置实现类,id必须为这个 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 上传图片的大小 B 5M 1*1024*1024*5--> <property name

Java Web(十一) 文件上传与下载

文件上传 上传的准备工作 表单method必须为post 提供file组件 设置form标签的enctype属性为multipart/form-data,如果没有设置enctype属性,浏览器是无法将文件自身传递到服务端的(enctype默认为application/x-www-form-urlencoded) <form action="fileupload.do" method="post" enctype="multipart/form-dat

Java中的文件上传和下载

文件上传原理: 早期的文件上传机制: 在TCP/IP中.最早出现的文件上传机制是FTP.他是将文件由客户端发送到服务器的标准机制. jsp中的文件上传机制: 在jsp编程中不能使用FTP的方法来上传文件,这是由jsp运行机制所决定的.jsp中通过将表单元素设置Method="post" enctype="multipart/form-data" 属性,让表单以二进制编码的方式提交,在接收次请求的Servelet中用二进制流来获取内容,从而实现文件的上传. 表单的en