1、新建一个Maven webapp项目,引入需要用的夹包,pom.xml文件的依赖包如下:

<dependencies><!-- 用于生成图片的缩略图 --><dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version></dependency>    <!-- 单元测试包 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!-- springmvc夹包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.3.11.RELEASE</version></dependency><!-- spring核心包,用于依赖注入 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.11.RELEASE</version></dependency><!-- servlet夹包 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version>       </dependency><!-- javaee包,在jsp文件中使用--><dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>7.0</version>        </dependency><!-- 文件上传的夹包 ,用于文件上传--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><!-- jstl标签包,在jsp中使用 --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency>    </dependencies>

2、配置文件设置如下:

(1) web.xml内容为:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!-- 配置springmvc的前端控制器,可以配置多个前端控制器来拦截不同的url -->     <servlet><servlet-name>spring</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>spring</servlet-name><url-pattern>/</url-pattern></servlet-mapping>      </web-app>

(2)springmvc.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-3.2.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"><!-- 配置jsp的视图解析器,可以配置多个viewresolver--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 会用到EL表达式以及jstl的标签,必须包含这个类 --><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property><property name="prefix" value="/" /><property name="suffix" value=".jsp" /></bean><!-- 1、自动注册defaultAnnotationHandlermapping ,AnnotationMethodhandlerAdapter,可以根据URL映射到方法--><!-- 2、数据绑定,数字和日期的format,如@NumberFormat ,@DateFormat,还有xml和json的默认读写功能 --><mvc:annotation-driven />  <!-- 1.加入对静态资源的处理 --><!-- 2.允许使用“/”做整体映射 --><mvc:default-servlet-handler/><!-- 自动扫描相关的包 --><context:component-scan base-package="thumbnail"/>        <!-- 对文件上传的处理,这里声明的id必须为multipartResolver--><bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >  <!--  最大为100M,单位为字节   --><property name="maxUploadSize" value="104857600"></property>      <property name="defaultEncoding" value="utf-8"></property>     <property name="maxInMemorySize" value="40960"></property></bean>      </beans>

3、后端开发

(1) 控制器类:

@Controller
@RequestMapping("/")
public class ImageController {//使用Autowired时,该业务类需要声明为@service,此时xml中不用其它的配置@Autowired    private Upload upload;    @Autowiredprivate Thumbnail thumbnail;//文件上传并生成缩略图@RequestMapping(value="/thumb",method=RequestMethod.POST)public String GenerateImage(@RequestParam("image")CommonsMultipartFile file,HttpServletRequest request) throws IOException{         //根据相对路径获取绝对路径,图片上传后位于元数据中String realUploadPath=request.getServletContext().getRealPath("/")+"images";     //获取上传后原图的相对地址String imageUrl=upload.uploadImage(file, realUploadPath);//获取生成的缩略图的相对地址String thumbImageUrl=thumbnail.generateThumbnail(file, realUploadPath);             return "redirect:/images";}//显示所有图片@RequestMapping(value="/images",method=RequestMethod.GET)public ModelAndView showImages(HttpServletRequest request,HttpServletResponse response){//根据相对路径获取绝对路径,图片上传后位于元数据中List<String> rawImagesList=new ArrayList<String>();        String realUploadPath=request.getServletContext().getRealPath("/")+"images";      rawImagesList=ImageList.printFile(realUploadPath+"/rawImages");ModelAndView mv=new ModelAndView();mv.addObject("imageList", rawImagesList);mv.setViewName("images");return mv;}//文件下载@RequestMapping("/download")public void download(HttpServletRequest request,HttpServletResponse response) throws IOException{String path=request.getServletContext().getRealPath("/")+"/images/rawImages/";String fileName=request.getParameter("filename");File file=new File(path+fileName);if(file.exists()){//设置MIME类型response.setContentType("application/octet-stream");            //或者为response.setContentType("application/x-msdownload");//设置头信息,设置文件下载时的默认文件名,同时解决中文名乱码问题response.addHeader("Content-disposition", "attachment;filename="+new String(fileName.getBytes(), "ISO-8859-1"));InputStream inputStream=new FileInputStream(file);ServletOutputStream outputStream=response.getOutputStream();byte[] bs=new byte[1024];while((inputStream.read(bs)>0)){outputStream.write(bs);}outputStream.close();inputStream.close();           }}
}

(2)业务类:

@Service
public class Upload {/** 上传图片并返回图片的相对地址*/   public String uploadImage(CommonsMultipartFile file,String realUploadPath) throws IOException{//如果目录不存在则创建目录File uploadFile=new File(realUploadPath+"/rawImages");if(!uploadFile.exists()){uploadFile.mkdirs();}        //创建输入流InputStream inputStream=file.getInputStream();//生成输出地址URLString outputPath=realUploadPath+"/rawImages/"+file.getOriginalFilename();//创建输出流OutputStream outputStream=new FileOutputStream(outputPath);     //设置缓冲区byte[] buffer=new byte[1024];//输入流读入缓冲区,输出流从缓冲区写出while((inputStream.read(buffer))>0){outputStream.write(buffer);}outputStream.close();//返回原图上传后的相对地址return "images/rawImages/"+file.getOriginalFilename();}}
@Service
public class Thumbnail {//设置缩略图的宽度和高度public static final int witdth=100;public static final int heigth=100;/*     * 生成缩略图并且返回相对地址*/public String generateThumbnail(CommonsMultipartFile file,String realUploadPath) throws IOException{//如果目录不存在则创建目录File uploadFile=new File(realUploadPath+"/thumbImages");if(!uploadFile.exists()){uploadFile.mkdirs();}   //缩略图保存的绝对地址String des=realUploadPath+"/thumbImages/"+file.getOriginalFilename();//生成缩略图Thumbnails.of(file.getInputStream()).size(witdth, heigth).toFile(des);//返回缩略图的相对地址return "images/thumbImages/"+file.getOriginalFilename();}}
public class ImageList {//获取文件夹下所有文件名public static List<String> printFile(String path) {File file = new File(path);List<String> images = new ArrayList<String>();// 是文件夹的话if (file.isDirectory()) {String[] filelist = file.list();for (int i = 0; i < filelist.length; i++) {File readfile = new File(path + "/" + filelist[i]);if (!readfile.isDirectory()) {images.add(readfile.getName());}}}return images;}}

4、前端开发

images.jsp的内容为:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>
<script type="text/javascript">function validate(){var a=document.getElementById("file");var form=document.getElementById("upload");if(a.value==""){        alert("请先选择图片");return false;}else{form.submit();}       }</script>
<h1 align="center">图片上传与下载</h1>
<p><c:forEach var="image" items="${imageList}">   <a href="images/rawImages/${image}" target="_blank"><img  src="data:images/thumbImages/${image}" /></a><a href="${pageContext.request.contextPath}/download?filename=${image}">${image}</a>        </c:forEach>
</p><form id="upload" action="${pageContext.request.contextPath}/thumb" method="post" enctype="multipart/form-data"><input id="file" type="file" name="image" id="image" >  <input  type="button" value="上传" οnclick="validate()">
</form></body>
</html>

5、文件结构

6、在Tomcat上运行的最终成果:

URL:http://localhost:8080/thumbnail/images

用SpringMVC框架实现图片上传与下载相关推荐

  1. 使用SpringMVC框架实现文件上传和下载功能

    使用SpringMVC框架实现文件上传和下载功能 (一)单个文件上传 ①配置文件上传解释器 <!-配置文件上传解释器 --> <mvc:annotation-driven>&l ...

  2. Bootstrap框架----单张图片上传实现---Uploadify插件

    框架搭建 我们在之前的文章中已经实现了 单张图片的上传,使用的是最基本的 File类型的input提交的方式,上传到远程静态资源器和七牛云. 之前的文章关注的地方 主要是后端,也就是图片上传保存到哪里 ...

  3. jquery.form.js java_使用jQuery.form.js/springmvc框架实现文件上传功能

    使用的技术有jquery.form.js框架, 以及springmvc框架.主要实现异步文件上传的同时封装对象,以及一些注意事项. 功能本身是很简单的,但是涉及到一些传递参数类型的问题.例如:jque ...

  4. python修改图片大小为30kb_Python的Tornado框架实现图片上传及图片大小修改

    图片的上传 上传图片使用了表单提交, 下面是html部分, enctype="multipart/form-data"表示不对字节进行编码,上传文件类型时需指定. input标签的 ...

  5. Layui框架实现图片上传

    Layui框架实现图片上传 前言: 一直以来,图片上传总是件很麻烦的事.最近在学layui,发现layui真是极大简化了各种复杂的操作,避免了繁琐的开发. layui图片上传和传统的图片上传不同,它并 ...

  6. SpringMVC实现文件的上传和下载

    SpringMVC实现文件的上传和下载http://www.bieryun.com/1120.html 前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:"用什么技术来实现一般网页上文件的 ...

  7. golang实现图片上传和下载

    golang实现图片上传和下载,测试过可行.filename传对应图片的名字,图片内容传二进制,其键为uploadfile. package mainimport ("fmt"&q ...

  8. 微信企业号开发(七)---图片上传与下载

    1.微信企业号图片上传与下载是微信企业号上传临时素材文件中一个小部门,微信企业号上传临时素材文件包括上传图片.语音.视频等媒体资源文件以及普通文件(如doc,ppt),接口返回媒体资源标识ID:med ...

  9. ssm上传文件获取路径_ssm框架实现图片上传显示并保存地址到数据库(示例代码)...

    本案例是通过springmvc+spring+mybatis框架以商品上传为例,实现的图片上传功能,并把图片的地址保存到数据库并在前台显示上传的图片. 本项目是使用maven搭建的项目,首先看下项目结 ...

最新文章

  1. axi dma 寄存器配置_FPGA Xilinx Zynq 系列(三十二)AXI 接口
  2. python bs4 安装_Python安装Bs4的多种方法
  3. 如果自己做事情,一直这样做会有一个缺点
  4. Spring学习(一)初识Spring
  5. java学习(35):巩固练习
  6. python小测试1答案_测试1:Python 基本语法(选择题
  7. ArcGIS地图服务发布,注记乱码
  8. Mac系统下运行Java项目出现Unable to start embedded Tomcat server解决方法
  9. 阿里云oss完成简单上传
  10. 信号与系统课后题答案分享
  11. 一行 Python 代码,20款经典小游戏
  12. matlab imrotate图像旋转
  13. 包饺子、看表演、逛庙会 中外居民北京“过大年”
  14. 场景图生成论文阅读笔记 之 PCPL
  15. 【Linux基础编程】help命令
  16. Complier Validation via Equivalence Modulo Inputs
  17. AppScan系列——web安全测试---AppScan扫描工具
  18. Nikon Capture NX2.2.6下载及破解方法
  19. 【上位机与下位机通信】使用WIFI模块ESP8266连接单片机与上位机通信
  20. 关于pom.xml一直提示Could not transfer artifact(无法搬运)+无法解析maven依赖(更新)的问题,我在学习springboot的过程中遇到的一些问题(持续更新中)

热门文章

  1. wujian100学习笔记(4)修改RTL后综合,实现以及生成比特流
  2. java写给自己的一封信,写给自己的一封信700字
  3. python 中运算符的使用
  4. FineBI 6.0入门基础(一)
  5. Untiy 帧同步的探索之路一 位置帧同步
  6. HDU 1248 寒冰王座 (完全背包)
  7. 1938年叶企孙给熊大缜的诗
  8. Python同切圆绘画以及圆的面积求解
  9. 专访中国工程院院士杜祥琬,可控核聚变美国成了吗?
  10. php addslashes没用_php addslashes 转义的方法