jsp上传下载

比较直白,代码拿来你们就可以用了


1.上传jsp页面:

<%@page contentType="text/html; charset=UTF-8"%>
<%@page import="com.zp.mail.*" %>
<!DOCTYPE HTML>
<html>
<head>
<title>文件上传</title>
<script type="text/javascript">
    function checkForm() {
        document.getElementById("form1").action = "upload.jsp?actionType=self";
    }
</script>
</head>
<%
    String message = "";
    String actionType = request.getParameter("actionType");
    if("self".equals(actionType)){
        out.print(actionType);
        UpAndDown up = new UpAndDown();
        out.print(up.toString());
        //处理下载
        //up.downLoad(request, response);
        message = up.upload(request, response);
        out.print("message: " + message);    
    }
%>

<body>
    <form action="" id="form1" enctype="multipart/form-data" method="post">
        <input type="hidden" value="actionType">
         上传用户:<input type="text" name="username"><br /> 
         上传文件1:<input type="file" name="file1" multiple="multiple"><br /> 
        上传文件2:<input type="file" name="file2"><br />
        <input type="submit" value="提交" οnclick="checkForm()">
    </form>
</body>
</html>

2.下载的jsp页面:

<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page import="com.zp.mail.*"%>
<!DOCTYPE HTML>
<html>
<head>
<title>下载文件显示页面</title>
</head>
<%
	String message = "";
	UpAndDown ud = new UpAndDown();
	Map<String, String> fileMap = ud.listFile();
	
	String actionType = request.getParameter("actionType");
	if("downFile".equals(actionType)){
		message = ud.downLoad(request, response);
	}
	out.println("message: " + message);
%>
<body>
<hr>
	<form action="" >
		<!-- 遍历Map集合 -->
		<c:forEach var="file" items="<%=fileMap%>">
			<c:url value="" var="downurl">
				<c:param name="fileName" value="${file.key}"></c:param>
				<c:param name="actionType" value="downFile"></c:param>
			</c:url>
         ${file.value}<a href="${downurl}">下载</a>
			<br />
		</c:forEach>
	</form>
</body>
</html>
3.上传下载处理类:

package com.zp.mail;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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;

public class UpAndDown
{
	String fileName = "note.txt";

	/**
	 * 文件上传
	 * 
	 * @param request
	 * @param response
	 * @return
	 */
	public String upload(HttpServletRequest request,
			HttpServletResponse response)
	{
		String message = "我是提示消息";
		String savePath = "E:\\pathCache";
		DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
		ServletFileUpload fileUpload = new ServletFileUpload(
				diskFileItemFactory);
		// 解决上传文件名的中文乱码
		fileUpload.setHeaderEncoding("UTF-8");
		String username = request.getParameter("username");
		String form2name = request.getParameter("form2name");
		System.out.println("username:" + username);
		System.out.println("form2Name:" + form2name);

		// 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
		try
		{
			List<FileItem> list = fileUpload.parseRequest(request);
			for (FileItem item : list)
			{
				if (item.isFormField())
				{
					String name = item.getFieldName();
					// 解决普通输入项的数据的中文乱码问题
					String value = null;
					String value1 = null;
					try
					{
						value = item.getString("UTF-8");
						value1 = new String(name.getBytes("iso8859-1"), "UTF-8");
					} catch (UnsupportedEncodingException e)
					{
						e.printStackTrace();
					}
					System.out.println(name + "  " + value);
					System.out.println(name + "  " + value1);
				} else
				{
					// 处理上传文件
					String fileName = item.getName();
					System.out.println("fileName:" + fileName);
					fileName = fileName.substring(fileName
							.lastIndexOf(File.separator) + 1);
					InputStream is = null;
					FileOutputStream fos = null;
					try
					{
						is = item.getInputStream();
						fos = new FileOutputStream(savePath + "/" + fileName);
						System.out.println("path: " + savePath + File.separator
								+ fileName);
						byte buffer[] = new byte[1024];
						int length = 0;
						while ((length = is.read(buffer)) > 0)
						{
							fos.write(buffer, 0, length);
						}
						is.close();
						fos.close();
					} catch (Exception e)
					{
						e.printStackTrace();
					}
					item.delete();
					message = "文件上传成功";
				}
			}

		} catch (FileUploadException e)
		{
			e.printStackTrace();
			message = "文件上传失败";
		}
		return message;
	}

	/**
	 * 列出所有文件
	 * 
	 * @return
	 */
	public Map<String, String> listFile()
	{
		Map<String, String> fileMap = new HashMap<String, String>();
		String path = "E:/pathCache";
		File file = new File(path);
		fileList(file, fileMap);
		return fileMap;
	}

	/**
	 * 递归出所有文件
	 * 
	 * @param file
	 * @param fileMap
	 */
	public void fileList(File file, Map fileMap)
	{
		if (!file.isFile())
		{
			File[] files = file.listFiles();
			for (File file2 : files)
			{
				System.out.println(file2.getName());
				fileList(file2, fileMap);
			}
		} else
		{
			String realName = file.getName().substring(
					file.getName().lastIndexOf("_") + 1);
			fileMap.put(file.getName(), realName);
		}
	}

	/**
	 * 文件下载
	 * 
	 * @param request
	 * @param response
	 */
	public String downLoad(HttpServletRequest request,
			HttpServletResponse response)
	{
		String message = "";// 返回信息
		fileName = request.getParameter("fileName");
		String pathRoot = "E:\\pathCache";
		try
		{
			fileName = new String(fileName.getBytes("iso8859-1"), "UTF-8");
		} catch (UnsupportedEncodingException e1)
		{
			e1.printStackTrace();
		}
		String realname = fileName.substring(fileName.indexOf("_") + 1);
		String path = findFileSavePathByFileName(fileName, pathRoot);
		File file = new File(path);

		// 如果文件不存在
		if (!file.exists())
		{
			message = "您要下载的文件已经被删除了";
			return message;
		}
		try
		{
			//设置响应头,控制浏览器下载该文件  判断是否请求来自IE浏览器,控制名称乱码
			if(request.getHeader("User-Agent").toUpperCase().indexOf("MSIE")>0){
				response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode(realname));
				
			}else{
				response.setHeader("content-disposition", "attachment;filename="+new String(realname.getBytes("UTF-8"), "ISO-8859-1"));
			}
	         //读取要下载的文件,保存到文件输入流
	         FileInputStream in = new FileInputStream(path);
	         //创建输出流
	         OutputStream os = response.getOutputStream();
	         //设置缓存区
	         int fileLengh = in.available();
	         byte[] bytes = new byte[fileLengh];
	         int len = 0;
	         while((len = in.read(bytes))>0){
	             os.write(bytes);
	         }
	         in.close();
	         os.close();
			message = "文件下载成功";
			return message;

		} catch (Exception e)
		{
			e.printStackTrace();
			message = "文件下载出错";
			return message;
		}
	}

	/**
	 * 通过文件名找到要下载文件路径
	 * 
	 * @param fileName
	 * @param fileSaveRootPath
	 * @return
	 */
	public String findFileSavePathByFileName(String fileName, String pathRoot)
	{
		
		String dir = pathRoot + "\\" + fileName;
		File file = new File(dir);
		if (!file.exists())
		{
			file.mkdirs();
		}
		return dir;
	}

	@Override
	public String toString()
	{
		return "UpAndDown [fileName=" + fileName + "]";
	}

}



猜你喜欢

转载自blog.csdn.net/alspd_zhangpan/article/details/69428107