springmvc上传文件(图片)

喜欢ヅ旅行 2022-07-13 11:07 348阅读 0赞

环境:springmvc+spring+mybatis
前提环境,需要把ssm框架搭建好,如果没有搭建的话可以先搭建这个框架

然后需要添加jar包
pom里面添加

  1. <!-- 上传组件 -->
  2. <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
  3. <dependency>
  4. <groupId>commons-io</groupId>
  5. <artifactId>commons-io</artifactId>
  6. <version>2.5</version>
  7. </dependency>
  8. <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
  9. <dependency>
  10. <groupId>commons-fileupload</groupId>
  11. <artifactId>commons-fileupload</artifactId>
  12. <version>1.3.2</version>
  13. </dependency>
  14. <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
  15. <dependency>
  16. <groupId>commons-codec</groupId>
  17. <artifactId>commons-codec</artifactId>
  18. <version>1.10</version>
  19. </dependency>

然后需要在springmvc.xml的配置文件中添加上传的配置文件

  1. <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->
  2. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  3. <!-- 默认编码 -->
  4. <property name="defaultEncoding" value="utf-8" />
  5. <!-- 文件大小最大值 -->
  6. <property name="maxUploadSize" value="10485760000" />
  7. <!-- 内存中的最大值 -->
  8. <property name="maxInMemorySize" value="40960"/>
  9. </bean>

然后就可以开干了,
首先是前台页面jsp页面:

  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  6. <title>图片上传</title>
  7. </head>
  8. <body>
  9. <form action="/eshop/upload/uploadimg" enctype="multipart/form-data" method="post">
  10. 上传图片:<input type="file" name="file" value="选择图片"><br>
  11. <input type="submit" value="上传">
  12. </form>
  13. </body>
  14. </html>

后台的controller类:

  1. package com.xiaopengpeng.controller;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.OutputStream;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import javax.servlet.http.HttpServletRequest;
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12. import org.springframework.web.multipart.MultipartFile;
  13. import org.springframework.web.multipart.MultipartHttpServletRequest;
  14. @Controller
  15. @RequestMapping("upload")
  16. public class UploadController {
  17. @RequestMapping("uploadimg")
  18. public String uploadimg(MultipartFile file) throws Exception{
  19. String filename = file.getOriginalFilename();
  20. System.out.println(filename);
  21. //写入本地磁盘
  22. InputStream is = file.getInputStream();
  23. byte[] bs = new byte[1024];
  24. int len;
  25. OutputStream os = new FileOutputStream(new File("D:/temp/" + filename));
  26. while ((len = is.read(bs)) != -1) {
  27. os.write(bs, 0, len);
  28. }
  29. os.close();
  30. is.close();
  31. return "ok";
  32. }
  33. }

完成!

上面的java类上传图片的时候使用的是原生态的上传形式,使用的是底层的java的io流的,其实他们提供封装好的保存形式,所以可以将上面的contriller类该成下面的这个类:

  1. package com.xiaopengpeng.controller;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.OutputStream;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import javax.servlet.http.HttpServletRequest;
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12. import org.springframework.web.multipart.MultipartFile;
  13. import org.springframework.web.multipart.MultipartHttpServletRequest;
  14. @Controller
  15. @RequestMapping("upload")
  16. public class UploadController {
  17. @RequestMapping("toUploadimg")
  18. public String toUploadimg(){
  19. return "uploadimg";
  20. }
  21. @RequestMapping("uploadimg")
  22. public String uploadimg(MultipartFile file) throws Exception{
  23. String filename = file.getOriginalFilename();
  24. file.transferTo(new File("D:/temp/" + filename));
  25. return "ok";
  26. }

简单了许多吧,其实这个样子写功能是不完善的,如果不同用户上传的文件名字一样就会把前一个文件给覆盖了,多以名字不能这样就草草的结束,可以在名字上再下下功夫,这些就留给你们自己做吧

发表评论

表情:
评论列表 (有 0 条评论,348人围观)

还没有评论,来说两句吧...

相关阅读