基于spring mvc注解:

(1)导入jar包:ant.jar、commons-fileupload.jar、connom-io.jar。

(2)在spring-mvc.xml中的配置

<!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1024(B)=10485760 bytes -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<property name="maxUploadSize" value="${web.maxUploadSize}" />
</bean>

(3)jsp页面

<form:form id="inputForm" modelAttribute="fileReport" action="${ctx}/buss/fileReport/save" method="post" enctype="multipart/form-data" class="form-horizontal" >
<form:hidden path="id"/>
<div class="control-group">
<label class="control-label">文件:</label>
<div class="controls">
<form:input path="file" type="file" htmlEscape="false" class="input-xlarge "/>
</div>
</div>
<input id="btnCancel" class="btn" type="button" value="返 回" οnclick="history.go(-1)"/>
</form:form>

(4)FileReport.java

private static final long serialVersionUID = 1L;
private String filePath; // 文件路径
private String fileName; // 文件名
private Product product; // 产品
private byte[] fileData; //文件内容
private MultipartFile file; //文件

(5)数据库表设计:

(6)FileReportController.java

@Controller
@RequestMapping(value = "${adminPath}/buss/fileReport")
public class FileReportController {

@Autowired
private FileReportService fileReportService;

@Autowired
private FileUtil fileUtil;

//文件上传

@RequiresPermissions("buss:fileReport:edit")
@RequestMapping(value = "save")
public String save(FileReport fileReport, Model model, RedirectAttributes redirectAttributes, HttpServletRequest request) {
if (!beanValidator(model, fileReport)){
return form(fileReport, model);
}

MultipartFile multipartFile = fileReport.getFile();

/*文件上传到服务器 1
if(multipartFile == null) {
fileReportService.save(fileReport);
addMessage(redirectAttributes, "保存文件上传成功");
return "redirect:"+Global.getAdminPath()+"/buss/fileReport/?repage";
}
String filePath = fileUtil.fileUpload(multipartFile, request);
fileReport.setFilePath(filePath);
*/

/*文件上传到服务器 2*/
if(multipartFile == null) {
fileReportService.save(fileReport);
addMessage(redirectAttributes, "保存文件上传成功");
return "redirect:"+Global.getAdminPath()+"/buss/fileReport/?repage";
}
String filePath = fileUtil.uploadFile(multipartFile, request);
fileReport.setFilePath(filePath);

/*文件上传到数据库*
byte[] fileData = fileUtil.fileUploadToServer(multipartFile);
fileReport.setFileData(fileData);
/
*
*/
fileReport.setFileName(multipartFile.getOriginalFilename());
fileReportService.save(fileReport);
addMessage(redirectAttributes, "保存文件上传成功");
return "redirect:"+Global.getAdminPath()+"/buss/fileReport/?repage";

}

//文件下载

@RequiresPermissions("buss:fileReport:edit")
@RequestMapping(value = "download")
public void downLoad(FileReport fileReport, HttpServletRequest request, HttpServletResponse response) {
//准备数据
FileReport fp = fileReportService.get(fileReport.getId());

//从服务器上下载文件
fileUtil.downLoad(fp, response);

//从数据库下载文件
//fileUtil.downFileFromServer(fp, response);
}

}

(7)添加工具类FileUtil.java

package com.thinkgem.jeesite.modules.buss.web;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import com.thinkgem.jeesite.modules.buss.entity.FileReport;

@Component(value="fileUploadUtil")
public class FileUtil {
public int fileSubPosition(MultipartFile multipartFile) {
return multipartFile.getOriginalFilename().lastIndexOf(".");
}

public String fileName(MultipartFile multipartFile) {
return multipartFile.getOriginalFilename().substring(0, fileSubPosition(multipartFile));
}

public String uploadFile(MultipartFile multipartFile, HttpServletRequest request) {
//如果是Tomcat服务器,创建文件上传的真是目录
String realPath = request.getSession().getServletContext().getRealPath("/upload");
String datePath = new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());
String basePath = realPath + datePath;
File fileDir = new File(basePath);
if(!fileDir.exists()) {
fileDir.mkdirs();
}

//获取文件后缀
String suffix = multipartFile.getOriginalFilename().substring(fileSubPosition(multipartFile));
//构建文件名
String fileName = UUID.randomUUID().toString() + suffix;
//拼成完整的文件保存路径加文件,File.separator文件区分符,相当于\
String filePath = basePath + File.separator + fileName;

/*上传文件
File file = new File(filePath);
try {
multipartFile.transferTo(file);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
*/

try {
//上传文件
FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), new File(filePath));
} catch (IOException e) {
e.printStackTrace();
}

return filePath;
}

//二进制文件上传到服务器
public String fileUpload(MultipartFile multipartFile, HttpServletRequest request) {
//如果是Tomcat服务器,创建文件上传的真是目录
String realPath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload");
String datePath = new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());
String basePath = realPath + datePath;

File fileDir = new File(basePath);
if(!fileDir.exists()) {
fileDir.mkdirs();
}
//String fileName = multipartFile.getOriginalFilename();
//获取文件后缀
String suffix = multipartFile.getOriginalFilename().substring(fileSubPosition(multipartFile));
String fileName = UUID.randomUUID().toString() + suffix;
String fileNamePath = basePath + fileName;
try {
InputStream is = multipartFile.getInputStream();

// 如果服务器已经存在和上传文件同名的文件,则输出提示信息
File tempFile = new File(fileNamePath);
if (tempFile.exists()) {
boolean delResult = tempFile.delete();
System.out.println("删除已存在的文件:" + delResult);
}
//multipartFile.getSize();
if(!fileName.equals("")) {
FileOutputStream fos = new FileOutputStream(fileNamePath);
byte[] buffer;
if(multipartFile.getSize() < 10485760) {
buffer = new byte[(int) multipartFile.getSize()];
} else {
buffer = new byte[10485760];
}

int count = 0;
// 开始读取上传文件的字节,并将其输出到服务端的上传文件输出流中
while((count=is.read(buffer)) > 0) { //is.read(buffer)此方法从输入流读取一定数量的字节并将它们存储到缓冲区数组b中
fos.write(buffer, 0, count); //1. 向服务端文件写入字节流 ; 2.toClient.write()此方法将指定字节写入此输出流
}

fos.close();
is.close();
}

} catch (IOException e) {
e.printStackTrace();
}
return fileNamePath;
}

//从服务器上以二进制文件下载
public void downLoad(FileReport fp, HttpServletResponse response) {
String path = fp.getFilePath();
String fileName = fp.getFileName();

try {
Long fileLength = new File(path).length();

//清空response
response.reset();
response.setContentType("application/octet-stream;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;fileName="+ new String(fileName.getBytes("utf-8"), "ISO8859-1"));
response.setHeader("Content-Length", String.valueOf(fileLength));

InputStream fis= new BufferedInputStream(new FileInputStream(path));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();

OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
toClient.write(buffer); //toClient.write()此方法将指定字节写入此输出流
toClient.flush();
toClient.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

//文件上传到数据库
public byte[] fileUploadToServer(MultipartFile multipartFile) {
//获取文件名
byte[] fileData = null;
try {
InputStream is = multipartFile.getInputStream();
if(multipartFile.getSize() < 10485760) {
fileData = new byte[(int)multipartFile.getSize()];
} else {
fileData = new byte[10485760];
}

is.read(fileData);

} catch (IOException e) {
e.printStackTrace();
}
return fileData;

}

//从数据库下载文件
public void downFileFromServer(FileReport fp, HttpServletResponse response) {
byte[] fileData = fp.getFileData();
String fileName = fp.getFileName();
//清空response
response.reset();
response.addHeader("Content-Length", "" + fileData.length);
response.setContentType("application/octet-stream;charset=UTF-8");

try {
response.setHeader("Content-Disposition", "attachment;fileName="+ new String(fileName.getBytes("utf-8"), "ISO8859-1"));
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
outputStream.write(fileData);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

转载于:https://www.cnblogs.com/lisang/p/4459776.html

spring mvc文件上传与下载相关推荐

  1. Spring MVC文件上传示例教程 - 单个和多个文件

    Spring MVC文件上传示例教程 - 单个和多个文件 文件上传是任何Web应用程序中非常常见的任务.我们之前已经看过如何在Servlet和Struts2文件上传中上传文件.今天我们将学习Sprin ...

  2. 全栈开发实战|Spring Boot文件上传与下载

    文件上传与下载是Web应用开发中常用的功能之一.接下来我们将讨论如何在Spring Boot的Web应用开发中,如何实现文件的上传与下载. 01.Spring Boot文件上传与下载 在实际的Web应 ...

  3. spring mvc文件上传小例子

    spring mvc文件上传小例子 1.jsp页面 <%@page contentType="text/html;charset=UTF-8"%> <%@page ...

  4. Spring MVC文件上传下载实例

    工程目录: 导入jar: controllers.FileControler.java package controllers;import java.io.File; import java.io. ...

  5. 【Spring】Spring MVC文件上传--整合bootstrap-fileinput和jQuery-File-Upload

    前言 这里分享两个使用Spring MVC进行文件上传的简单示例, 分别整合bootstrap-fileinput 和 Jquery File Upload , 代码十分简单, 都是入门的示例,因此这 ...

  6. Springmvc,Spring MVC文件上传

    Springmvc文件上传: 1.代码截图如下: 2.UploadController.java: package cn.csdn.controller;import java.io.File;imp ...

  7. Spring MVC 文件上传 文件下载

    索引: 目录索引 参看代码 GitHub: pom.xml WebConfig.java index.jsp upload.jsp FileUploadController.java Files_Ut ...

  8. Spring MVC文件上传

    1.配置xml文件 1 <!-- 指定文件上传解析 名字不能乱给 --> 2 <bean name="multipartResolver" class=" ...

  9. Spring mvc 文件上传

    1.文件上传的必要前提 A.form 表单的 enctype 取值必须是:multipart/form-data (默认值是:application/x-www-form-urlencoded) en ...

最新文章

  1. 数据通信技术(八:OSPF单区域配置实验)
  2. hasnMap的基本操作 源码(三)
  3. 学python需要什么基础知识-没学过Python先要学习哪些基础知识?
  4. tcpmp 编译 源代码分析
  5. 自定义WP日志标题长度
  6. 协同OA融入ERP 高端应用助企业升级转型
  7. Hibernate的使用
  8. Spring-外部配置的值是如何通过@Value注解获取的?
  9. 第一章 基于STM32核心板的电路设计与制作流程
  10. spring整合redis菜鸟版
  11. MyEclipse10破解方法
  12. seo和sem的区别与联系
  13. 短文本分类---小白从0到0.3的辛酸历程(上)
  14. 规格说明书-吉林市一日游
  15. 浏览器主页被劫持篡改为hao123或者别的网页解决方法
  16. 微信屏蔽网址的解决办法:366API轻松实现被微信屏蔽的网址在微信内正常访问
  17. 华为交换机关闭网口_华为交换机监控口配置命令图文教程
  18. 数据中台常用术语整理
  19. 2022年vue项目使用go.js 2.1去水印
  20. Log4net详细说明

热门文章

  1. mysql 字符串运算_使用MySQL字符串运算实施精巧化SQL注入攻击
  2. HTML标签悬浮到最下方,HTML – 如何在兄弟姐妹的悬停上显示元素?
  3. 2021年四川省副高考试成绩查询,2021年四川省教育考试院成绩查询登录入口
  4. c语言函数官网,c语言函数
  5. android toast_Android Toast
  6. cloudfoundry servicce-broker部署错误分析
  7. Push or pull?
  8. Windows Server入门系列25 系统内置用户和组
  9. Spark分区详解!DT大数据梦工厂王家林老师亲自讲解!
  10. 一些图像处理函数用法