SpringMVC框架实现图片上传与下载

网友投稿 345 2022-12-29


SpringMVC框架实现图片上传与下载

本文实例为大家分享了SpringMVC框架实现图片上传与下载的具体代码,供大家参考,具体内容如下

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

net.coobird

thumbnailator

0.4.8

junit

junit

3.8.1

test

org.springframework

spring-webmvc

4.3.11.RELEASE

org.springframework

spring-core

4.3.11.RELEASE

javax.servlet

javax.servlet-api

3.1.0

javax

javaee-api

7.0

commons-fileupload

commons-fileupload

1.3.1

javax.servlet

jstl

1.2

2、配置文件设置如下:

(1) web.xml内容为:

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">

spring

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:springmvc.xml

1

spring

/

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">

spring

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:springmvc.xml

1

spring

/

(2)springmvc.xml文件内容为:

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xmlns:context="http://springframework.org/schema/context"

xmlns:mvc="http://springframework.org/schema/mvc"

xsi:schemaLocation="

http://springframework.org/schema/mvc

http://springframework.org/schema/mvc/spring-mvc-3.2.xsd

http://springframework.org/schema/beans

http://springframework.org/schema/beans/spring-beans-3.2.xsd

http://springframework.org/schema/context

http://springframework.org/schema/context/spring-context-3.2.xsd">

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xmlns:context="http://springframework.org/schema/context"

xmlns:mvc="http://springframework.org/schema/mvc"

xsi:schemaLocation="

http://springframework.org/schema/mvc

http://springframework.org/schema/mvc/spring-mvc-3.2.xsd

http://springframework.org/schema/beans

http://springframework.org/schema/beans/spring-beans-3.2.xsd

http://springframework.org/schema/context

http://springframework.org/schema/context/spring-context-3.2.xsd">

3、后端开发

(1) 控制器类:

@Controller

@RequestMapping("/")

public class ImageController {

//使用Autowired时,该业务类需要声明为@service,此时xml中不用其它的配置

@Autowired

private Upload upload;

@Autowired

private 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 rawImagesList=new ArrayList();

String realUploadPath=request.getServletContext().getRealPath("/")+"images";

rawImagesList=ImageList.printFile(realUploadPath+"/rawImages");

ModelAndView mv=new ModelAndView();

mv.addObject("imagehttp://List", 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();

//生成输出地址URL

String 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 printFile(String path) {

File file = new File(path);

List images = new ArrayList();

// 是文件夹的话

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" %>

${image}

5、文件结构

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

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:软件接口测试工具下载(软件接口测试方法)
下一篇:javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair 解决方法总结
相关文章

 发表评论

暂时没有评论,来抢沙发吧~