使用spring上传文件或图片,及文件或目录的删除

首先是基于spring框架,在springMVC-servlet.xml中配置multipart类型解析器,具体配置如下:

	<!-- 设置上传文件最大值   1M=1*1024*1024(B)=1048576 bytes -->  
	<bean id="multipartResolver"     class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
		<property name="maxUploadSize" value="1048576" /> 
	 </bean>

其配置了一个多类型文件解析器CommonsMultipartResolver,并配置了maxUploadSize属性,设置上传文件占用的最大容量。

当然,使用springMVC上传文件需要用到Apache开源上传软件包fileupload和io包,并将这两个包依赖引入工程。如下图:

  附上这两个jar的链接:https://pan.baidu.com/s/1Qs32eGzjcuieh8HjveQiLQ 密码:p8gj

 之后在controller层增加上传文件的接口,这里以图片为例。

 /**
   * 上传图片
   */
  @RequestMapping(value = "/touploadImg")
  public String touploadImg(Model model) throws Exception{
	  return "/two";//上传路劲
  }  


   /**
   * 上传图片
   */
  @RequestMapping(value = "/uploadImg")
  public static String uploadImg(Model model,MultipartFile file) throws Exception {
		String aa = file.getOriginalFilename();
		aa = new String(aa.getBytes("ISO-8859-1"),"UTF-8");//转码
		String bb=null;
		if(file!=null&&aa!=null&&aa.length()>0){
			String path = "G:\\cesh\\";//文件放置的文件夹
			File file1 = new File(path);
			if(!file1.exists()){//判断文件目录是否存在,不在则新增
				file1.mkdirs();
			}
			
//			bb=System.currentTimeMillis()+aa.substring(aa.lastIndexOf("."));
			bb=System.currentTimeMillis()+aa;//以时间戳加图片名的方式存储图片
			System.out.println(bb);
			File newfile = new File(path+bb);
			file.transferTo(newfile);
		}
		model.addAttribute("image",bb);//回显刚刚上传的图片名称
		return "/two";	//重回上传页面
  }

前端two.jsp的代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
  <%@ taglib prefix="fn" 
      uri="http://java.sun.com/jsp/jstl/functions" %>
  <%@ taglib prefix="c" 
      uri="http://java.sun.com/jsp/jstl/core" %>
<html>
	<head>
		<meta charset="utf-8">
		<title>上传图片测试</title>
	</head>
	<body>
		<form action="uploadImg.action" method="post" enctype="multipart/form-data">
			<c:if test="${image !=null }">
				<img src="/cesh/${image }" width=100 height=100/><br/>
			</c:if>
			<input type="file" name="file"/><br/>
			<input type="submit" value="上传">
		</form>
	</body>


</html>

注:这里返回的图片路径应该在tomcat中配置,不然是显示404找不到该图片路径的。

即在tomcat目录下的conf文件夹下的server.xml配置文件,在最下方的Host标签中添加以下配置:

<Context docBase="G:\upload" path="/cesh" reloadable="false"/>

这里配置了当访问“/cesh”路径时,映射提供服务机器G盘的upload文件夹所在的目录。

测试:启动测试工程,在浏览器中输入http://localhost:8080/Spring_test/touploadImg.action跳转图片上传页面。如下:

上传成功后可以在G:/upload下找到刚刚上传的图片。

附:文件或目录的删除:

/**
   * 删除单个文件
   *
   * @param fileName
   *            要删除的文件的文件名
   * @return 单个文件删除成功返回true,否则返回false
   */
  public static boolean deleteFile(String fileName) {
      File file = new File(fileName);
      // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
      if (file.exists() && file.isFile()) {
          if (file.delete()) {
              System.out.println("删除单个文件" + fileName + "成功!");
              return true;
          } else {
              System.out.println("删除单个文件" + fileName + "失败!");
              return false;
          }
      } else {
          System.out.println("删除单个文件失败:" + fileName + "不存在!");
          return false;
      }
  }
  
  /**
   * 删除目录及目录下的文件
   *
   * @param dir
   *            要删除的目录的文件路径
   * @return 目录删除成功返回true,否则返回false
   */
  public static boolean deleteDirectory(String dir) {
      // 如果dir不以文件分隔符结尾,自动添加文件分隔符
      if (!dir.endsWith(File.separator))
          dir = dir + File.separator;
      File dirFile = new File(dir);
      // 如果dir对应的文件不存在,或者不是一个目录,则退出
      if ((!dirFile.exists()) || (!dirFile.isDirectory())) {
          System.out.println("删除目录失败:" + dir + "不存在!");
          return false;
      }
      boolean flag = true;
      // 删除文件夹中的所有文件包括子目录
      File[] files = dirFile.listFiles();
      for (int i = 0; i < files.length; i++) {
          // 删除子文件
          if (files[i].isFile()) {
              flag = deleteFile(files[i].getAbsolutePath());
              if (!flag)
                  break;
          }
          // 删除子目录
          else if (files[i].isDirectory()) {
              flag = deleteDirectory(files[i]
                      .getAbsolutePath());
              if (!flag)
                  break;
          }
      }
      if (!flag) {
          System.out.println("删除目录失败!");
          return false;
      }
      // 删除当前目录
      if (dirFile.delete()) {
          System.out.println("删除目录" + dir + "成功!");
          return true;
      } else {
          return false;
      }
  }

编写一个主方法做测试用:

public static void main(String [] args) throws UnsupportedEncodingException{
	  	String fileName="G:\\upload";
	        File file = new File(fileName);
	        if (!file.exists()) {
	            System.out.println("删除文件失败:" + fileName + "不存在!");
	        } else {
	            if (file.isFile())
	                deleteFile(fileName);
	            else
	                deleteDirectory(fileName);
	        }
  }

猜你喜欢

转载自blog.csdn.net/qq_32169593/article/details/82852525
今日推荐