河曲智叟 发表于 2024-5-13 10:17:59

SpringMVC实现文件上传&下载(2)

文件上传步骤

第一步:由于SpringMVC利用的是commons-fileupload实现,故将其组件引入项目中,这里用到的是commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar。
第二步:spring-mvx中配置MultipartResolver处理器。可在此加入对上传文件的属性限制。
第三步:在Controller的方法中添加MultipartFile参数。该参数用于接收表单中file组件的内容
第四步:编写前台表单。注意enctype="multipart/form-data"以及,如果是单个文件直接利用MultipartFile 即可
springmvc.xml

<bean id="multipartResolver"
   >
   
   <property name="maxUploadSize">
       <value>10000000</value>
   </property>
</bean>controller

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class FileUploadController {


    //TODO:上传代码
    @RequestMapping("/fileupload")
    public ModelAndView upload(String name,
            //上传多个文件
            @RequestParam("file") MultipartFile[] file,
            HttpServletRequest request) throws IllegalStateException,
            IOException {

      //获取文件 存储位置
      String realPath = request.getSession().getServletContext()
                .getRealPath("/uploadFile");

      File pathFile = new File(realPath);

      if (!pathFile.exists()) {
            //文件夹不存 创建文件
            pathFile.mkdirs();
      }
      for (MultipartFile f : file) {

            System.out.println("文件类型:"+f.getContentType());
            System.out.println("文件名称:"+f.getOriginalFilename());
            System.out.println("文件大小:"+f.getSize());
            System.out.println(".................................................");
            //将文件copy上传到服务器
            f.transferTo(new File(realPath + "/" + f.getOriginalFilename()));
             //FileUtils.copy
      }
      //获取modelandview对象
      ModelAndView view = new ModelAndView();
      view.setViewName("redirect:index.jsp");
      return view;
    }



    //TODO:下载代码
    @RequestMapping(value = "/filedownload")
    public ModelAndView download(HttpServletRequest request,
            HttpServletResponse response) throws Exception {

//      String storeName = "Spring3.xAPI_zh.chm";
      String storeName="文件.txt";
      String contentType = "application/octet-stream";
      FileUploadController.download(request, response, storeName, contentType);
      return null;
    }

    //文件下载 主要方法
    public static void download(HttpServletRequest request,
            HttpServletResponse response, String storeName, String contentType
         ) throws Exception {

      request.setCharacterEncoding("UTF-8");
      BufferedInputStream bis = null;
      BufferedOutputStream bos = null;

      //获取项目根目录
      String ctxPath = request.getSession().getServletContext()
                .getRealPath("");

      //获取下载文件露肩
      String downLoadPath = ctxPath+"/uploadFile/"+ storeName;

      //获取文件的长度
      long fileLength = new File(downLoadPath).length();

      //设置文件输出类型
      response.setContentType("application/octet-stream");
      response.setHeader("Content-disposition", "attachment; filename="
                + new String(storeName.getBytes("utf-8"), "ISO8859-1"));
      //设置输出长度
      response.setHeader("Content-Length", String.valueOf(fileLength));
      //获取输入流
      bis = new BufferedInputStream(new FileInputStream(downLoadPath));
      //输出流
      bos = new BufferedOutputStream(response.getOutputStream());
      byte[] buff = new byte;
      int bytesRead;
      while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
            bos.write(buff, 0, bytesRead);
      }
      //关闭流
      bis.close();
      bos.close();
    }

}注意:注意:设置表单中form表单的属性为:enctype="multipart/form-data"

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: SpringMVC实现文件上传&下载(2)