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

您所在的位置:网站首页 图片上传技术 用SpringMVC框架实现图片上传与下载

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

2024-07-13 21:48| 来源: 网络整理| 查看: 265

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内容为:

spring org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:springmvc.xml 1 spring /     (2)springmvc.xml文件内容为:

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("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(); //生成输出地址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的内容为:

上传图片 function validate() { var a=document.getElementById("file"); var form=document.getElementById("upload"); if(a.value==""){ alert("请先选择图片"); return false; } else{ form.submit(); } } 图片上传与下载

${image}        

5、文件结构

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

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

    



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3