简单springMVC+maven文件的上传下载

本文详细介绍如何在SpringMVC框架中实现文件的上传和下载功能,包括Maven依赖配置、XML配置、Controller处理方法及页面展示。通过具体代码示例,展示了文件上传的处理流程,包括文件保存路径设置、输入输出流操作以及使用UUID避免文件名冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springmvc+maven文件的上传下载
直接上代码
//先从导包开始

1:导包
	<dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>

    2:applicationContext.xml
        <context:component-scan base-package="com.hellojava"></context:component-scan>

    <mvc:annotation-driven/>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
     <!--上传的组件的属性-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UTF-8"></property>
        <property name="maxUploadSize" value="10000000000"></property>
    </bean>

    3:web.xml
    //编码过滤
    <filter>
    <filter-name>characterEncoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>characterEncoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
 //控制器
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  4:创建上传文件的页面和下载文件的页面
  //上传
  	注意:enctype="multipart/form-data"
    <form action="uploadHandler" method="post" enctype="multipart/form-data">
        文件:<input type="file" name="uploadFile"><br/>
        <input type="submit" value="上传">
    </form>
//下载
<body>
<h2>Hello World!</h2>
<c:forEach items="${requestScope.files}" var="f">
    <form action="downloadHandler" method="post">
        <c:out value="${f}"></c:out>
        <input type="hidden" name="fileName" value="${f}">
        <input type="submit" value="下载">
    </form>
</c:forEach>
</body>
   5:创建处理文件上传的Controller的RequestMapping的方法
   @Controller
public class FileController {

    @RequestMapping("/uploadview")
    public String uploadView() {
        return "upload";
    }

    @RequestMapping("/uploadHandler")
    public String uploadHandler(MultipartFile uploadFile, HttpServletRequest request) {
        //request.getServletContext() ServletContext (application)
        String path = request.getServletContext().getRealPath("/upload");
        File uploadRoot = new File(path);
        if (!uploadRoot.exists()) {
            uploadRoot.mkdirs();
        }
        try {
            InputStream inputStream = uploadFile.getInputStream();
            byte[] bs = new byte[inputStream.available()];
            inputStream.read(bs, 0, bs.length);
            inputStream.close();
            OutputStream outputStream = new FileOutputStream(uploadRoot + "/" + uploadFile.getOriginalFilename());
            outputStream.write(bs, 0, bs.length);
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //上传成功
        return "redirect:loadUploadFile";
    }

    @RequestMapping("/loadUploadFile")
    public String loadUploadFile(HttpServletRequest request, Model model) {
        File fileRoot=new File(request.getServletContext().getRealPath("/upload"));
        String result="error";
        if(fileRoot.exists()){
            String[] fs=fileRoot.list();
            model.addAttribute("files",fs);
            result="index";
        }
        return result;
    }

    @RequestMapping("/downloadHandler")
    public ResponseEntity<byte[]> downLoadHandler(String fileName,HttpServletRequest request){
        File fileRoot=new File(request.getServletContext().getRealPath("/upload"));
        String result="error";
        //http请求的头信息对象
        HttpHeaders headers = new HttpHeaders();
        //设置下载的文件名
        System.out.println(fileName);
        headers.setContentDispositionFormData("attachment", fileName);
        //设置下载的内容类型
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

        ResponseEntity<byte[]> entity=null;
        byte[] bs=null;
        if(fileRoot.exists()){
            try {
                FileInputStream fis = new FileInputStream(fileRoot + "/" + fileName);
                bs = new byte[fis.available()];
                fis.read(bs, 0, bs.length);
                fis.close();
            }catch (IOException e){
                e.printStackTrace();
            }
            entity=new ResponseEntity<>(bs,headers, HttpStatus.CREATED);
        }
        return entity;
    }
}

为了文件名字不冲突和不覆盖问价 可以使用UUID>>
String uuid = UUID.randomUUID().toString().replace("-", “”);
这里是用空格代替生成的“-”
上代码

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
public class UpImgServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String path = getServletContext().getRealPath("/up");
        DiskFileItemFactory disk = new DiskFileItemFactory(102410,new File("d:/a"));     
        ServletFileUpload up = new ServletFileUpload(disk);     
        try{       
            List list = up.parseRequest(request);      
            //只接收图片.jpg-iamge/jpege.,bmp/imge/bmp,png,

            List imgs = new ArrayList();
            for(FileItem file :list){
                if(file.getContentType().contains("image/")){
                    String fileName = file.getName();
                    fileName = fileName.substring(fileName.lastIndexOf("")+1);      //获取扩展
                    String extName = fileName.substring(fileName.lastIndexOf("."));//.jpg
                    //UUID
                    String uuid = UUID.randomUUID().toString().replace("-", "");
                    //新名称
                    String newName = uuid+extName;//在这里用UUID来生成新的文件夹名字,这样就不会导致重名
                    FileUtils.copyInputStreamToFile(file.getInputStream(),
                    new File(path+"/"+newName));
                    //放到list
                    imgs.add(newName);
                }
                file.delete();
            }
            request.setAttribute("imgs",imgs);
            request.getRequestDispatcher("/jsps/imgs.jsp").forward(request, response);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值