文件的上传与下载

@RequestMapping("/saveXXX")
public String saveXXX(@RequestParam("attachment") MultipartFile attachment,ProjectPurchase projectPurchase,HttpServletRequest req,HttpServletResponse response,HttpSession session) {
    // 接收附件,并将文件路径保存到数据库
    x.setPurchaseAttachment(this.saveFile(req, attachment, xxx.getId()));
    // 保存附件路径
    xxxService.updateXXX(x);
    // ,前端是表单提交,重定向到原页面
    return "redirect:/ooo/xxx.jsp";
}

//保存文件
public String  saveFile(HttpServletRequest req, MultipartFile file,String id) {
    // 判断文件是否为空
    if (!file.isEmpty()) {
        try {
            FileUtil.copySysPath(req);
            //设置保存路径
            String path=FileUtil.getSystemUploadPath("/../attachment/"+id+"/"+file.getOriginalFilename());
            // 把文件写到指定的路径中  
            File saveDir = new File(path); 
            if (!saveDir.getParentFile().exists())
                saveDir.getParentFile().mkdirs();
            // 转存文件
            file.transferTo(saveDir);
            //return文件路径
            return "/attachment/"+id+"/"+ file.getOriginalFilename();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return "";
}

//文件下载
@RequestMapping("/downloadxxx ")
public void downloadAttachment(HttpServletRequest req,HttpServletResponse res){
//   获取网站部署路径(通过ServletContext对象),用于确定下载文件位置,从而实现下载  
    String path = servletContext.getRealPath("/")+"../"+purchaseManageService.findAttachment(req.getParameter("id"));  
//   设置下载文件  
    String name=path.substring(path.lastIndexOf("/")+1);
//   1.设置文件ContentType类型,自动判断为下载文件类型  
    res.setContentType("multipart/form-data");  
    //后面使用发现如果文件名为中文,则导出有误。
    //度娘修改方法:
    if (req.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {  
        name = URLEncoder.encode(name, "UTF-8");
    } else {  
        name = new String(name.getBytes("UTF-8"), "ISO8859-1");  
    }  
//   2.设置文件头/设置下载文件名  
    res.setHeader("Content-Disposition", "attachment;fileName="+name);  
    OutputStream out;  
//  通过文件路径获得File对象  
    File file = new File(path);  
    try {  
        FileInputStream is = new FileInputStream(file);  
//      3.通过response获取OutputStream对象(out)  
        out = res.getOutputStream();  
        int len = 0;  
        byte[] buffer = new byte[1024];  
        while ((len=is.read(buffer))>0){  
//          4.写到输出流(out)中  
            out.write(buffer,0,len);  
        }  
        is.close();  
        out.close();  
        out.flush();  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值