zoukankan      html  css  js  c++  java
  • 文件上传与下载

    文件上传与下载

    1. 导包

      <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
      <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.4</version>
      </dependency>
      
    2. 配置

      <!--文件上传配置-->
      <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
          <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
          <property name="defaultEncoding" value="utf-8"/>
          <!-- 上传文件大小上限,单位为字节(10485760=10M) -->
          <property name="maxUploadSize" value="10485760"/>
          <property name="maxInMemorySize" value="40960"/>
      </bean>
      
    3. 页面

      <form action="${pageContext.request.contextPath}/upload" enctype="multipart/form-data" method="post">
          <input type="file" name="file">
      	<input type="submit" name="upload" value="上传">
      	<br/>
      	<a href="/download">点击下载</a>
      </form>
      
    4. 流上传

      @RequestMapping("/upload")
      public String fileUpload(@RequestParam("file") CommonsMultipartFile file , HttpServletRequest request) throws IOException {
      
          //获取文件名 : file.getOriginalFilename();
          String uploadFileName = file.getOriginalFilename();
      
          //如果文件名为空,直接回到首页!
          if ("".equals(uploadFileName)){
              return "redirect:/index.jsp";
          }
          System.out.println("上传文件名 : "+uploadFileName);
      
          //上传路径保存设置
          String path = request.getSession().getServletContext().getRealPath("/upload");
          //如果路径不存在,创建一个
          File realPath = new File(path);
          if (!realPath.exists()){
              realPath.mkdir();
          }
          System.out.println("上传文件保存地址:"+realPath);
      
          InputStream is = file.getInputStream(); //文件输入流
          OutputStream os = new FileOutputStream(new File(realPath,uploadFileName)); //文件输出流
      
          //读取写出
          int len=0;
          byte[] buffer = new byte[1024];
          while ((len=is.read(buffer))!=-1){
              os.write(buffer,0,len);
              os.flush();
          }
          os.close();
          is.close();
          return "redirect:/index.jsp";
      }
      

      采用file.Transto 上传

      @RequestMapping("/upload2")
      public String  fileUpload2(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request) throws IOException {
      
          //上传路径保存设置
          String path = request.getSession().getServletContext().getRealPath("/upload");
          File realPath = new File(path);
          if (!realPath.exists()){
              realPath.mkdir();
          }
          //上传文件地址
          System.out.println("上传文件保存地址:"+realPath);
      
          //通过CommonsMultipartFile的方法直接写文件(注意这个时候)
          file.transferTo(new File(realPath +"/"+ file.getOriginalFilename()));
      
          return "redirect:/index.jsp";
      }
      
    5. 下载

      @RequestMapping(value="/download")
      public String downloads(HttpServletResponse response , HttpServletRequest request) throws Exception{
          //要下载的图片地址
          String  path = request.getSession().getServletContext().getRealPath("/upload");
          String  fileName = "123.jpg";
      
          //1、设置response 响应头
          response.reset(); //设置页面不缓存,清空buffer
          response.setCharacterEncoding("UTF-8"); //字符编码
          response.setContentType("multipart/form-data"); //二进制传输数据
          //设置响应头
          response.setHeader("Content-Disposition",
                  "attachment;fileName="+ URLEncoder.encode(fileName, "UTF-8"));
      
          File file = new File(path,fileName);
          //2、 读取文件--输入流
          InputStream input=new FileInputStream(file);
          //3、 写出文件--输出流
          OutputStream out = response.getOutputStream();
      
          byte[] buff =new byte[1024];
          int index=0;
          //4、执行 写出操作
          while((index= input.read(buff))!= -1){
              out.write(buff, 0, index);
              out.flush();
          }
          out.close();
          input.close();
          return null;
      }
      
  • 相关阅读:
    win8设置无线网络共享
    设计模式学习每天一个——Decorator模式
    【转】命令模式(command pattern)
    设计模式总览
    设计模式学习每天一个——Command模式
    设计模式学习每天一个——Observer模式
    【转】UML解惑:图说UML中的六大关系
    设计模式学习每天一个——Strategy模式
    深入学习
    设计模式学习每天一个——Singleton模式
  • 原文地址:https://www.cnblogs.com/pinked/p/12235288.html
Copyright © 2011-2022 走看看