文件上传下载代码

来源:互联网 发布:卡通农场数据丢失 编辑:程序博客网 时间:2024/05/20 17:08
DBDao.java
import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DBDao {   private static String url = "jdbc:mysql://localhost:3306/homework?useUnicode=true&characterEncoding=UTF-8";   private static String user = "root";   private static String password = "root";   static {      try {         Class.forName("com.mysql.jdbc.Driver");         // System.out.println("ok");      } catch (ClassNotFoundException e) {         // TODO Auto-generated catch block         // System.out.println("no");         e.printStackTrace();      }   }   public static Connection getConnection() {      Connection conn = null;      try {         conn = DriverManager.getConnection(url, user, password);         // System.out.println("ok==");      } catch (SQLException e) {         // TODO Auto-generated catch block         // System.out.println("no---");         e.printStackTrace();      }      return conn;   }}
BaseDao.java
import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class BaseDao {   private Connection conn;   private PreparedStatement ps;   private ResultSet set;   public int[] addMoreData(Connection conn,String sql,Object[][] fields) throws SQLException{      this.conn=conn;      ps=conn.prepareStatement(sql);      if(fields!=null){      for(int i=0;i<fields.length;i++){         for(int j=0;j<fields[i].length;j++){            ps.setObject(j+1, fields[i][j]);         }         ps.addBatch();      }      }      return ps.executeBatch();   }   public int updateDB(Connection conn, String sql, Object[] fields) throws SQLException {      this.conn = conn;      ps = conn.prepareStatement(sql);      if(fields!=null){      for (int i = 0; i < fields.length; i++) {         ps.setObject(i + 1, fields[i]);      }      }      return ps.executeUpdate();   }      public ResultSet selectDB(Connection conn,String sql,Object[] fields ) throws SQLException{      this.conn = conn;      ps = conn.prepareStatement(sql);      if(fields!=null){      for (int i = 0; i < fields.length; i++) {         ps.setObject(i + 1, fields[i]);      }      }      return ps.executeQuery();   }      public void closeAll(){      try {      if(conn!=null){                     conn.close();      }      else if(ps!=null){         ps.close();      }      else if(set!=null){         set.close();      }      System.out.println("--------------");      } catch (SQLException e) {         e.printStackTrace();      }   }public ResultSet getTotalRecord(Connection conn,String sql)throws SQLException{      this.conn=conn;   ps=conn.prepareStatement(sql);   set=ps.executeQuery();   return set;   }public ResultSet getTotalRecord(Connection conn,String sql,Object[] fields)throws SQLException{         this.conn=conn;   ps=conn.prepareStatement(sql);   if(fields!=null){      for(int i=0;i<fields.length;i++){         ps.setObject(i+1, fields[i]);      }   }   set=ps.executeQuery();   return set;}   }
FileDao.java
import com.shopping.model.Files;import java.sql.ResultSet;import java.sql.SQLException;public interface FileDao {   public int addfile(Files file)throws SQLException;   public int deleteById(int id)throws SQLException;   public ResultSet select()throws SQLException;   public ResultSet findFileById(int id)throws SQLException;  }
FileDaoImpl.java
import com.shopping.dao.api.BaseDao;import com.shopping.dao.api.DBDao;import com.shopping.dao.api.FileDao;import com.shopping.model.Files;import org.springframework.stereotype.Repository;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;@Repositorypublic class FileDaoImpl extends BaseDao implements FileDao {   @Override   public int addfile(Files file) throws SQLException {      String sql="insert into files(file_name,file_desc,file_auto_name,user_name)values(?,?,?,?)";      Connection conn= DBDao.getConnection();      Object[] fields={file.getFile_name(),file.getFile_desc(),file.getFile_auto_name(),file.getUser_name()};      return super.updateDB(conn, sql, fields);      }   @Override   public int deleteById(int id) throws SQLException {      String sql="delete from files where id=?";      Object[] fields={id};      Connection conn= DBDao.getConnection();      return super.updateDB(conn, sql, fields);         }   @Override   public ResultSet select() throws SQLException {      String sql="select * from files";      Connection conn=DBDao.getConnection();      return super.selectDB(conn, sql, null);         }   @Override   public ResultSet findFileById(int id) throws SQLException {      String sql="select * from files where id=?";      Object[] fields={id};      Connection conn=DBDao.getConnection();      return super.selectDB(conn, sql, fields);         }}
package com.shopping.model;
public class Files {   private int id;   private String file_name;   private String file_desc;   private String file_auto_name;   private String user_name;   public int getId() {      return id;   }   public void setId(int id) {      this.id = id;   }   public String getFile_name() {      return file_name;   }   public void setFile_name(String file_name) {      this.file_name = file_name;   }   public String getFile_desc() {      return file_desc;   }   public void setFile_desc(String file_desc) {      this.file_desc = file_desc;   }   public String getFile_auto_name() {      return file_auto_name;   }   public void setFile_auto_name(String file_auto_name) {      this.file_auto_name = file_auto_name;   }   public String getUser_name() {      return user_name;   }   public void setUser_name(String user_name) {      this.user_name = user_name;   }   public Files(int id, String file_name, String file_desc, String file_auto_name, String user_name) {      super();      this.id = id;      this.file_name = file_name;      this.file_desc = file_desc;      this.file_auto_name = file_auto_name;      this.user_name = user_name;   }   public Files() {      super();   }   public Files(String file_name, String file_desc, String file_auto_name, String user_name) {      super();      this.file_name = file_name;      this.file_desc = file_desc;      this.file_auto_name = file_auto_name;      this.user_name = user_name;   }   @Override   public String toString() {      return "Files [id=" + id + ", file_name=" + file_name + ", file_desc=" + file_desc + ", file_auto_name="            + file_auto_name + ", user_name=" + user_name + "]";   }      }
FileService.java
package com.shopping.service.api;import com.shopping.model.Files;import java.util.ArrayList;public interface FileService {   public int addfile(String file_name, String file_desc, String file_auto_name, String user_name);   public int delete(int id);   public ArrayList<Files> selectAll();   public Files selectById(int id);}
FileServiceImpl.java
package com.shopping.service.imp;import com.shopping.dao.api.FileDao;import com.shopping.model.Files;import com.shopping.service.api.FileService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;@Servicepublic class FileServiceImpl implements FileService {   @Autowired   FileDao file;   @Override   public int addfile(String file_name, String file_desc, String file_auto_name, String user_name) {      // TODO Auto-generated method stub      Files files=new Files(file_name,file_desc,file_auto_name,user_name);      int t=0;      try {         t=file.addfile(files);      } catch (SQLException e) {         // TODO Auto-generated catch block         e.printStackTrace();      }      return t;   }   @Override   public int delete(int id) {      int t=0;      try {         t=file.deleteById(id);      } catch (SQLException e) {         // TODO Auto-generated catch block         e.printStackTrace();      }      return t;   }   @Override   public ArrayList<Files> selectAll() {      ResultSet set=null;      ArrayList<Files> list=new ArrayList<Files>();      try {         set=file.select();         while(set.next()){            int id=set.getInt("id");            String file_name=set.getString("file_name");            String file_desc=set.getString("file_desc");            String file_auto_name=set.getString("file_auto_name");            String user_name=set.getString("user_name");            list.add(new Files(id,file_name,file_desc,file_auto_name,user_name));                     }      } catch (SQLException e) {         // TODO Auto-generated catch block         e.printStackTrace();      }      return list;   }   @Override   public Files selectById(int id) {      Files file1=new Files();      ResultSet set=null;      try {         set=file.findFileById(id);         if(set.next()){                                    file1.setId(id);            file1.setFile_name(set.getString("file_name"));            file1.setFile_desc(set.getString("file_desc"));            file1.setFile_auto_name(set.getString("file_auto_name"));                        file1.setUser_name(set.getString("user_name"));                     }      } catch (SQLException e) {         // TODO Auto-generated catch block         e.printStackTrace();      }      return file1;   }}
package com.shopping.servlet;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;


import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


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


import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;


import com.shopping.model.Files;
import com.shopping.serviceimpl.FileServiceImpl;
import com.shopping.utils.getDate;


public class FileServlet extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


String p=request.getParameter("p");

System.out.println(p);
if("doUpFile".equals(p)){
doUpFile(request, response);
}else if("del".equals(p)){
del(request, response);
}else if("doma".equals(p)){
doma(request, response);
}else if("download".equals(p)){
download(request, response);
}


}


protected void doUpFile(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//使用Apache文件上传组件步骤
DiskFileItemFactory factory=new DiskFileItemFactory();


//得到了解析器
ServletFileUpload servletFileUpload=new ServletFileUpload(factory);
//判断上传是文件还是表单
boolean result=servletFileUpload.isMultipartContent(request);

System.out.print(result);
Date date = new Date();
String file_name=null;
String file_desc=null;
String autoName = new SimpleDateFormat("yyyyMMddHHmmss").format(date);
System.out.print(autoName);
String username=String.valueOf(request.getSession().getAttribute("loginuser"));

if(result){
try {
List<FileItem> fileitems=null;
fileitems = servletFileUpload.parseRequest(request);
System.out.println(autoName+"----------------------------------------------"+username);
for(FileItem fileitem: fileitems){
//相当于表单元素的input里的name属性
if(fileitem.isFormField()){
String fieldname=fileitem.getFieldName();
String value=fileitem.getString("utf-8");
//解决代码乱码的问题
if("file_name".equals(fieldname)){
file_name=value;
}else if("file_desc".equals(fieldname)){
file_desc=value;
}
}
else{
InputStream inputStream=fileitem.getInputStream();
if(inputStream!=null&&inputStream.available()>0){
//得到文件名
String filename= fileitem.getName();
int index=filename.lastIndexOf(".");
String ext=filename.substring(index);
System.out.print(filename+"   " +ext);
autoName+=ext;

String path=getServletContext().getRealPath("/uploadfile");
System.out.println(path+"89999999999999999999999");
File file=new File(path,autoName);
System.out.println(file+"3456789-------------");
//得到一个输出流,输出到服务器的磁盘
FileOutputStream outputStream=new FileOutputStream(file);
//一次上传1kb
byte[] datas=new byte[1024];
int len=0;
while((len=inputStream.read(datas))>0){
//读进多少字节,就写出多少字节
outputStream.write(datas, 0, len);

}

outputStream.flush();
outputStream.close();


}
}
}

} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//调用service层的方法把相应的数据写到数据库

FileServiceImpl service=new FileServiceImpl();
int t=service.addfile(file_name, file_desc, autoName, username);
if(t>0){
response.getWriter().print("<script>alert('上传成功!'); location.href='FileServlet?p=doma';</script>");
}

}


public void doma(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
FileServiceImpl service=new FileServiceImpl();
ArrayList<Files> file=service.selectAll();
request.setAttribute("file", file);
request.getRequestDispatcher("/Admin/files/fileshow.jsp").forward(request, response);



}


public void del(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


int id=Integer.parseInt(request.getParameter("id"));
FileServiceImpl service=new FileServiceImpl();
Files f=service.selectById(id);
String path="/uploadfile/"+f.getFile_auto_name();
String realPath=getServletContext().getRealPath(path);
File file=new File(realPath);
    boolean delete=file.delete();
int t=service.delete(id);
if(delete&&t>0){
response.getWriter().print("<script>alert('删除成功!');location.href='FileServlet?p=doma';</script>");
}

}
public void download(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
int id=Integer.parseInt(request.getParameter("id"));
FileServiceImpl fs=new FileServiceImpl();
Files f=fs.selectById(id);

String path="/uploadfile/"+f.getFile_auto_name();
String realPath=getServletContext().getRealPath(path);

String auto_name=f.getFile_auto_name();
//auto_name=URLEncoder.encode(auto_name, "utf-8");
String ext=auto_name.substring(auto_name.lastIndexOf("."));

String fileName=f.getFile_name();
fileName+=ext;
//处理可能会出现的乱码问题
//fileName=URLEncoder.encode(fileName,"utf-8");
//确定流来下载文件

FileInputStream input=new FileInputStream(realPath);
   response.reset();
       //response.setContentLength(input.available());
      // response.setContentType("charset=UTF-8");
   
   String agent = (String)request.getHeader("USER-AGENT"); 
   boolean isFireFox=(agent != null && agent.toLowerCase().indexOf("firefox")!=-1);
       if(isFireFox)
       {
       fileName =(new String(fileName.getBytes("UTF-8"),"ISO-8859-1"));   
       }
       else
       {
       fileName =  java.net.URLEncoder.encode(fileName, "UTF-8");
       }
       
       
       response.setHeader("Content-Disposition", "attachment;filename="+fileName);
//response.reset();
//response.setHeader("Content-Disposition", "attachment; filename="+fileName);

OutputStream out=response.getOutputStream();

byte[] buf=new byte[1024];
int i=0;
while((i=input.read(buf))>0){
out.write(buf,0,i);

}
input.close();
out.flush();
out.close();
System.out.print("下载完成");



}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


doGet(request, response);
}




}

public class LoadServlet extends HttpServlet{
    /**
    * 载文件,通过OutputStream输出流 
    */
    public void doPost(HttpServletRequest request,HttpServletResponse response){
        //1.获取要下载的文件的绝对路径
        String realPath = this.getServletContext().getRealPath("/load/ceshi.txt");
        //2.获取要下载的文件名
        String fileName = realPath.subString(realPath.lastIndexOf("\\")+1);
        String userAgent = request.getHeader("User-Agent");
        //针对IE或者以IE为内核的浏览器:
        if (userAgent.contains("MSIE")||userAgent.contains("Trident")) {
            fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
        } else {
        //非IE浏览器的处理:
            fileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
        }
        //3.设置content-disposition响应头控制浏览器以下载的方式打开文件
        response.setHeader("content-disposition","attachment;filename="+fileName);
        //4.获取要下载的文件输入流
        InputStream in = new FileInputStream(realPath);


        int len = 0;
        //5.创建书缓冲区
        byte[] buffer = new byte[1024];
        //6.通过response对象获取OutputStream输出流对象
        OutputStream os = response.getOutputStream();
        //7.将FileInputStream流对象写入到buffer缓冲区
        while((len=in.read(buffer))>0){
            os.write(buffer,0,len);
        }
        //8.关闭流
        in.close();
        os.close();
    }
}