java项目中附件的上传下载

一、添加配置文件

    1)spring-mvc.xml文件   这个是注解包的扫描、视图解析、文件解析   内容如下:



    xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="  
       http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
       http://www.springframework.org/schema/mvc   
       http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd   
       http://www.springframework.org/schema/tx   
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd   
       http://www.springframework.org/schema/context  
       http://www.springframework.org/schema/context/spring-context-4.3.xsd" >  

   
   
   
   
   
        
   
   
       
       
       
   
 
     
        
     
     
       
     
   
   
      

     


    2)spring-mybatis.xml文件  这个是自动扫描mapper.xml映射文件 内容如下:


    xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="  
       http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
       http://www.springframework.org/schema/mvc   
       http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd   
       http://www.springframework.org/schema/tx   
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd   
       http://www.springframework.org/schema/context  
       http://www.springframework.org/schema/context/spring-context-4.3.xsd" >  

    
      
      
      
      
        classpath:mapper/*.xml
      

   

   
    
        
    

 



    3)spring-pool.xml文件   这个是读取数据库的配置文件和建立连接池,连接池用的是durid 内容如下:


    xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="  
       http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
       http://www.springframework.org/schema/mvc   
       http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd   
       http://www.springframework.org/schema/tx   
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd   
       http://www.springframework.org/schema/context  
       http://www.springframework.org/schema/context/spring-context-4.3.xsd" >  

  
  
        
            
                classpath:jdbc.properties
            

        

  

  
       lazy-init="true">
        状态过滤器
        
       
        
       
       
       
  

 
  
           destroy-method="close" init-method="init" lazy-init="true">
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
            
                
            

        

        
        
        
        
        
        
        
    



二、实体类
    写一个数据库中关于文件的实体类 并添加get和set方法

    注意点:类的属性名称要和表的字段的名称一样

三、写dao层
    写一个接口,添加操作数据库的方法   内容如下:

package cn.tedu.ttms.dao;

import java.util.List;

import cn.tedu.ttms.entity.Attachement;

public interface AttachementDao {
    //查询表里面所有的上传过的文件
    List findObjects();
    //根据文件的摘要查询记录。用来判断要上传的文件是否已经存在
    int findObjectByDisgest(String fileDisgest);
    //根据id查询记录
    Attachement findAttachementById(Integer id);
    //上传文件,插入到表里面
    int insertObject(Attachement attachement);
}

四、根据dao里面的接口写mapper映射文件

    注意点:1)每条语句的id的值要和dao接口里面的方法想对应
        2)resultType返回值类型要写全名(即:包名.类名) parameterType参数类型也要写全名的






   
    
   
    
   
    
        parameterType="cn.tedu.ttms.entity.Attachement">
    
       insert into tms_attachements
       (id,title,fileName,contentType,
        filePath,fileDisgest,athType,
        belongId,createdTime,modifiedTime,
        createdUser,modifiedUser)
        values(
        #{id},#{title},#{fileName},#{contentType},
        #{filePath},#{fileDisgest},#{athType},
        #{belongId},#{createdTime},#{modifiedTime},
        #{createdUser},#{modifiedUser})
    
   

    


五、service层
    写一个service接口,写上要进行业务逻辑处理的方法
package cn.tedu.ttms.service;

import java.io.File;
import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import cn.tedu.ttms.entity.Attachement;

public interface AttachementAervice {
    //查询所有记录
    List findObjects();
    //上传,插入一条记录
    void saveObject(String title,Integer athType,Integer belongId,MultipartFile mFile,String serverPath);
    //根据id查询某条记录
    File findObjectById(Integer id);
}


六、service接口的实现类

    实现接口之后重写接口的所有方法,进行具体业务逻辑的处理
    将dao层接口依赖注入进来
package cn.tedu.ttms.service.Impl;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import javax.annotation.Resource;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FilenameUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import cn.tedu.ttms.dao.AttachementDao;
import cn.tedu.ttms.entity.Attachement;
import cn.tedu.ttms.service.AttachementAervice;

@Service
public class AttachementServiceImpl implements AttachementAervice{
    @Resource
    private AttachementDao attachementDao;

    public List findObjects() {
        // TODO Auto-generated method stub
        return attachementDao.findObjects();
    }

    public void saveObject(String title, Integer athType, Integer belongId, MultipartFile mFile, String serverPath) {
        //上传文件,获得文件名
        String oFileName=mFile.getOriginalFilename();
        byte[] fileBytes;
        File dest = null;
        String fileDigest = null;
        try {
            fileBytes=mFile.getBytes();
            fileDigest=DigestUtils.md5Hex(fileBytes);
            
            //int count=attachementDao.findObjectByDisgest(fileDigest);
            
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");
            String dateStr=sdf.format(new Date());
            String newFileName=UUID.randomUUID().toString()+"."+FilenameUtils.getExtension(oFileName);
            String realPath=serverPath+"/uploads/"+dateStr+"/"+newFileName;
            dest=new File(realPath);
            File parent=dest.getParentFile();
            if(!parent.exists()){
                parent.mkdirs();
            }
            mFile.transferTo(dest);
            
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Attachement t=new Attachement();
        t.setTitle(title);
        t.setFileName(oFileName);
        t.setFilePath(dest.getPath());
        t.setAthType(athType);//1
        t.setBelongId(belongId);//1
        t.setContentType(mFile.getContentType());
        t.setFileDisgest(fileDigest);
        t.setCreatedUser("admin");
        t.setModifiedUser("admin");
        attachementDao.insertObject(t);
        
    }

    public File findObjectById(Integer id) {
        
            //1.根据id查找记录     
            Attachement a=
            attachementDao.findAttachementById(id);
            
            //2.获得文件的真实路径,构建文件对象关联真实路径
            File file=new File(a.getFilePath());
            //3.检测文件是否存在,存在则下载 
            
            return file;
    }
    
    
}

七、写controller处理页面发过来的每个请求
    将service层的接口依赖注入进来
    其中有的返回的是JsonResult对象,那是我将结果都封装成一个对象

package cn.tedu.ttms.controller;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

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

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

import cn.tedu.ttms.entity.Attachement;
import cn.tedu.ttms.service.AttachementAervice;

@Controller

public class fileupdow {
    @Resource
    private AttachementAervice attachementService;
    
    //首页的跳转
    @RequestMapping("/indexUI.do")
    public String indexUI(){
        return "index";
    }

    
    //文件上传功能
    @RequestMapping("/attach/doSaveObject")
    @ResponseBody
    public JsonResult saveObject(String title,Integer athType,Integer belongId,MultipartFile mFile,HttpServletRequest request){
        String serverPath=request.getServletContext().getRealPath("/");
        attachementService.saveObject(title, athType, belongId, mFile, serverPath);
        System.out.println("11111111111111111111111");
        return new JsonResult();
    
    }
    //查询所有,将记录全部显示出来
    @RequestMapping("/attach/doFindObjects")
    @ResponseBody
    public JsonResult doFindObjects(){
        List list=attachementService.findObjects();
        System.out.println("2222222222222222222222222222");
        return new JsonResult(list);
    }
    //文件的下载
    @RequestMapping("/attach/doDownload")
    @ResponseBody
    public byte[] doDownload(Integer id,
        HttpServletResponse response)throws IOException{
        File file=
        attachementService.findObjectById(id);
        //设置响应消息头(下载时的固定写法)
        response.setContentType(
        "appliction/octet-stream");
        response.setHeader(
        "Content-disposition",
        "attachment;filename="+file.getName());
        //根据文件真实路径构建一个Path对象 
        Path path=Paths.get(file.getPath());
        //将文件的字节返回(spring mvc 会自动将这字节写入到文件)
        return Files.readAllBytes(path);
        //return file;
    }
    
}


八、jsp页面的设置


     
              enctype="multipart/form-data">
           
            
            
            

                
                    
                        
                          
                          
                            
                            
                            
                        
                    
                    
                
选择 标题 文件名 文件类型 操作

            

        

 


九、相应的页面的js代码处理的

$(document).ready(function(){
    $("#uploadFormId")
    .on("click",".btn-upload",doUpload)
    .on("click",".btn-down",doDownload)
    doGetObjects();
});

/*下载*/
function doDownload(){
    var id=$(this).parent().parent().data("id");
    console.log("id="+id);
    var url="attach/doDownload.do?id="+id;
    document.location.href=url;
}
/*查询所有记录*/
function doGetObjects(){
    var url="attach/doFindObjects.do";
    $.post(url,function(result){
        if(result.state==1){
         setTableRows(result.data);
        }else{
         alert(result.message);
        }
    });
};
/*以列表形式显示所有记录*/
function setTableRows(list){
    var tBody=$("#tbodyId");
    tBody.empty();
    var tds=''
        +'[title]'
        +'[name]'
        +'[contentType]'
        +'';
    for(var i in list){
        var tr=$("");
        tr.data("id",list[i].id);
        tr.append(
        tds.replace("[id]",list[i].id)
           .replace("[title]",list[i].title)
           .replace("[name]",list[i].fileName)
           .replace("[contentType]",list[i].contentType));
        tBody.append(tr);
    }
}


/*上传*/
function doUpload(){
    var url="attach/doSaveObject.do";
    //异步提交表单(先确保jquery.form.js已经引入了)
    $("#uploadFormId").ajaxSubmit({
        type:'post',
        url:url,
        data:{"athType":1,"belongId":1},
        dataType:'json',
        success:function(result){
            if(result.state==1){
            alert("上传成功!");
            doGetObjects();
            }else{
            alert(result.message);
            }
        }
    });//url,type,dataType,success,...
}













你可能感兴趣的:(java项目中附件的上传下载)