java文件上传与下载

一、所需jar包:

     commons-fileupload-1.2.1.jar、commons-io-1.4.jar

二、项目结构:

三、具体代码:

1.上传页面upload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
	<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>文件上传</title>
	</head>
	<body>
		<form action="<%=basePath %>/upload/uploadServlet.jsp" enctype="multipart/form-data" method="post">
			上传用户:<input type="text" name="username"><br />
			上传文件1:<input type="file" name="file1"><br />
			<input type="submit" value="提交">
		</form>
	</body>
</html>

2.上传文件业务处理uploadServlet.jsp

<%@ page language="java" import="java.util.*,java.text.SimpleDateFormat,java.util.Date,java.io.*,org.apache.commons.fileupload.disk.*,org.apache.commons.fileupload.servlet.ServletFileUpload,org.apache.commons.fileupload.FileItem,org.apache.commons.fileupload.FileUploadException" pageEncoding="UTF-8" contentType="text/html"%>  
<%@page import="java.sql.*,java.io.PrintWriter"%> 
<%
response.setContentType("text/html;charSet=UTF-8");  
request.setCharacterEncoding("UTF-8");  

//保存路径  
//String savePath = getServletContext().getRealPath("E://upload");  
String savePath="E://upload";
File saveDir = new File(savePath);  
// 如果目录不存在,就创建目录  
if(!saveDir.exists()){
    saveDir.mkdir();  
}  
  
// 创建文件上传核心类  
DiskFileItemFactory factory = new DiskFileItemFactory();  
ServletFileUpload sfu = new ServletFileUpload(factory);  

//设置编码  
sfu.setHeaderEncoding("UTF-8");  
// 设置上传的单个文件的最大字节数为2M  
//sfu.setFileSizeMax(1024*1024*2);  
//设置整个表单的最大字节数为10M  
sfu.setSizeMax(1024*1024*10);  
  
try{  
    // 处理表单请求  
    List<FileItem> itemList = sfu.parseRequest(request);  
    for (FileItem fileItem : itemList) {  
        // 对应表单中的控件的name  
        String fieldName = fileItem.getFieldName();  
        System.out.println("控件名称:" + fieldName);  
        // 如果是普通表单控件  
        if(fileItem.isFormField()){  
            String value = fileItem.getString();  
            //重新编码,解决乱码  
            value = new String(value.getBytes("ISO-8859-1"),"UTF-8");  
            System.out.println("普通内容:" + fieldName + "=" + value);  
            
            
        // 上传文件  
        }else{  
            // 获得文件大小  
            Long size = fileItem.getSize();  
            if(size>0){
            	 // 获得文件名  
                String fileName = fileItem.getName();  
                System.out.println("文件名:"+fileName+"\t大小:" + size + "byte");  
                  
                //设置不允许上传的文件格式  
                if(fileName.endsWith(".exe")){  
                    request.setAttribute("message", "不允许上传的类型!");  
                }else{  
                    //将文件保存到指定的路径  
                    File file = new File(savePath,fileName);  
                    fileItem.write(file);  
                    request.setAttribute("message", "上传成功!");  
                }
            }
             
        }  
    }  
}catch(FileUploadException e){  
    e.printStackTrace();  
}catch(Exception e){  
    e.printStackTrace();  
}  
request.setAttribute("message","abcdef123");
//上传完毕后  转发到首页  
request.getRequestDispatcher("/upload/Message.jsp").forward(request, response);  



%>

3.提示信息页面Message.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
  <head>
    <title>消息提示</title>
  </head>
  
  <body>
        ${message}
  </body>
</html>

4.列出上传过的文件列表处理代码ToListFileServlet.jsp

<%@ page language="java" import="java.util.*,java.text.SimpleDateFormat,java.util.Date,java.io.*,org.apache.commons.fileupload.disk.*,org.apache.commons.fileupload.servlet.ServletFileUpload,org.apache.commons.fileupload.FileItem,org.apache.commons.fileupload.FileUploadException" pageEncoding="UTF-8" contentType="text/html"%>  
<%@page import="java.sql.*,java.io.PrintWriter"%> 

<%
response.setContentType("text/html;charSet=UTF-8");  
request.setCharacterEncoding("UTF-8");  

//获取上传文件的目录
//String uploadFilePath = this.getServletContext().getRealPath("/WEB-INF/upload");
String uploadFilePath ="E://upload";
//存储要下载的文件名
Map<String,String> fileNameMap = new HashMap<String,String>();
//递归遍历filepath目录下的所有文件和目录,将文件的文件名存储到map集合中
listfile(new File(uploadFilePath),fileNameMap);//File既可以代表一个文件也可以代表一个目录
//将Map集合发送到listfile.jsp页面进行显示
request.setAttribute("fileNameMap", fileNameMap);
request.getRequestDispatcher("/download/listfile.jsp").forward(request, response);

%>

<%!
/**
* @Method: listfile
* @Description: 递归遍历指定目录下的所有文件
* @param file 即代表一个文件,也代表一个文件目录
* @param map 存储文件名的Map集合
*/ 
public void listfile(File file,Map<String,String> map){
	//如果file代表的不是一个文件,而是一个目录
	if(!file.isFile()){
	//列出该目录下的所有文件和目录
	File files[] = file.listFiles();
	//遍历files[]数组
	for(File f : files){
	//递归
	listfile(f,map);
	}
	}else{
	
	//file.getName()得到的是文件的原始名称,这个名称是唯一的,因此可以作为key,realName是处理过后的名称,有可能会重复
	map.put(file.getName(), file.getName());
	}
	}

%>

5.列表页面listfile.jsp

<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML>
<html>
<head>
<title>下载文件显示页面</title>
</head>
<%
 Map<String,String> map=(Map<String,String>)request.getAttribute("fileNameMap");
%>
<body>
<!-- 遍历Map集合 -->
<%
for (String str : map.keySet()) {
	String str2 = map.get(str);//得到每个key多对用value的值
	System.out.println(str + "     " + str2);%>
	
	<%=str %> <a href="<%=basePath %>/download/downServlet.jsp?filename=<%=str2 %>">下载</a><br>
	
<%}
%>
 <table>
   <tr>
     <td>
       <div></div>
     </td>
   </tr>
 </table>
 
</body>
</html>

6.下载处理代码downServlet.jsp
<%@ page language="java" import="java.util.*,java.io.*,java.util.Map.Entry,java.text.SimpleDateFormat,java.util.Date,net.sf.json.JSONArray,net.sf.json.JSONObject,java.net.URLEncoder,java.net.URLDecoder,com.ultrapower.eoms.common.portal.model.UserSession,cn.com.ultrapower.baseline.dao.BaseDAO,org.apache.commons.fileupload.disk.*,org.apache.commons.fileupload.servlet.ServletFileUpload,org.apache.commons.fileupload.FileItem,org.apache.commons.fileupload.FileUploadException,cn.com.ultrapower.baseline.common.DynamicReadConfig" pageEncoding="UTF-8" contentType="text/html"%>
<%@page import="java.sql.*,java.io.PrintWriter"%>
<%
response.setContentType("text/html;charSet=UTF-8");
request.setCharacterEncoding("UTF-8");


try{
//得到要下载的文件名
String fileName = request.getParameter("filename");//要下载匹配的文件名
String fileName2 = request.getParameter("filename2");//要下载文件的真实名称
fileName=URLDecoder.decode(fileName,"utf-8");
fileName2=URLDecoder.decode(fileName2,"utf-8");//可能有中文或其他字符
String fileSaveRootPath = DynamicReadConfig.getConfigProperty("attachment.pathbak2");
//String fileSaveRootPath="D:\\upload";
//=======
File file = new File(fileSaveRootPath+"\\"+fileName);
//如果文件不存在
if(!file.exists()){
request.setAttribute("message", "您要下载的资源:"+fileName+" 已经不存在");
request.getRequestDispatcher("/local/notice/notice_downloadMessag.jsp").forward(request, response);
return;
}
//以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(fileSaveRootPath+"\\"+fileName));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
response.reset();

response.setContentType("application/x-msdownload");
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName2, "UTF-8"));

OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();

//=========
}catch(IllegalStateException e){  
    e.printStackTrace();  
}
%>



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值