SpringMvc3+extjs4实现上传与下载功能

最近生活过的很充实,人一直在不停的忙碌着学习新东西。这是我最近遇到的问题,我找度娘n了很久,终于找到了解决方案!

前台代码:


后台代码:

/**
*记录返回结果*/
 class ExtJSFormResult {

  private boolean success;

  public boolean isSuccess() {
    return success;
  }

  public void setSuccess(boolean success) {

  }

  public String toString() {
    return "{success:" + this.success + "}";
  }
}
 

class FileUploadBean {

    private CommonsMultipartFile file;

    public CommonsMultipartFile getFile() {
      return file;
    }

    public void setFile(CommonsMultipartFile file) {
      this.file = file;
    }
}

/**
 * 文件的上传与下载
 * @author Administrator
 *
 */
@Controller
@RequestMapping(value = "/fileUploadDown")
public class FileUploadAndDownController {
  
  private static int countter=1; //定义一个计数器,用于上传文件的重命名
  
  @Autowired
  private ProAnnexDao proAnnextDao;
  
  

  public void setProAnnextDao(ProAnnexDao proAnnextDao) {
    this.proAnnextDao = proAnnextDao;
  }

  @RequestMapping(value="fileUpload",method = RequestMethod.POST)
  public @ResponseBody String create(RedirectAttributes redirectAttributes,FileUploadBean uploadItem, 
      BindingResult result,HttpSession session){
    //获取根路径
    String uploadFolderPath = session.getServletContext().getRealPath("/"); 
    ExtJSFormResult extjsFormResult = new ExtJSFormResult();
    try {
      
      if (result.hasErrors()) {
        for (ObjectError error : result.getAllErrors()) {
          System.err.println("Error: " + error.getCode() + " - "
              + error.getDefaultMessage());
        }

        // 设置ExtJS返回 - error
        extjsFormResult.setSuccess(false);

        return extjsFormResult.toString();
      }

      MultipartFile file = uploadItem.getFile();
      String fileName = null;
      InputStream inputStream = null;
      OutputStream outputStream = null;
      if(file.getSize()>0){
         System.out.println("File Size:::" + file.getSize());
        if(file.getSize()>5242880){
           System.out.println("File Size:::" + file.getSize());
           extjsFormResult.setSuccess(false);
          return "error";
        }
        
       inputStream = file.getInputStream();
    
       File newFile = new File(uploadFolderPath + "fileUpload/");
       //如果文件路径不存在就新建一个
       if(!newFile.exists()){
         newFile.mkdirs();
       }
       //获取文件名
       String name=file.getOriginalFilename();
       //从数据库中查询存在此类文件名否
        Long count=proAnnextDao.isRepeatName(name);
        //如果存在一样的文件名,就进行从命名
        if (count>0) {
          name=name.substring(0, name.lastIndexOf("."))+"("+(countter++)+")"+name.substring(name.lastIndexOf("."));
        }
        
        fileName = uploadFolderPath + "fileUpload/" + name;
        outputStream = new FileOutputStream(fileName); 
        int readBytes = 0;
        byte[] buffer = new byte[10000];
        while ((readBytes = inputStream.read(buffer, 0, 10000)) != -1) {
            outputStream.write(buffer, 0, readBytes);
        }
        
        outputStream.close();
        inputStream.close();
       
        
      }

      // 设置ExtJS返回 - sucsess
      extjsFormResult.setSuccess(true);
    } catch (Exception e) {
      
      e.printStackTrace();
      // 设置ExtJS返回 - error
    
      extjsFormResult.setSuccess(false);
    }
    

    return extjsFormResult.toString();
  }
  

}

springMvc.xml(此文件名可能跟项目的实际情况有区别)中的配置:


   
     
    
    
  
  
  
    
  
  
  

以上的就是上传文件了。 

下载呢?

下载比较简单,代码如下:

@RequestMapping("/downloadFile") 
  public void download(@Valid @ModelAttribute("downLoadName") String downLoadName,
      HttpServletResponse response,HttpSession session,BindingResult result,HttpServletRequest request) throws IOException { 
    
    response.setCharacterEncoding("UTF-8");
    request.setCharacterEncoding("UTF-8");
    //获取文件的路径
    String url=session.getServletContext().getRealPath("/")+"/fileUpload/"+downLoadName;
    System.out.println(url);
    File file=new File(url);
    
    InputStream input = FileUtils.openInputStream(file); 
    byte[] data = IOUtils.toByteArray(input); 
 
    //System.out.println("文件名:"+downLoadName);
    response.reset(); 
   //设置响应的报头信息(中文问题解决办法)
    response.setHeader("content-disposition","attachment;fileName="+URLEncoder.encode(downLoadName, "UTF-8"));
    response.addHeader("Content-Length", "" + data.length); 
    response.setContentType("application/octet-stream; charset=UTF-8"); 
    
    IOUtils.write(data, response.getOutputStream()); 
    IOUtils.closeQuietly(input); 
    
  }

在界面上只要有一个连接地址:如:window.location.href="根路径/fileUploadDown/downfile/downLoadName=" rel="external nofollow" +name;这样就可以下载了....   超连接的写法基本一样,这里就不多说了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(SpringMvc3+extjs4实现上传与下载功能)