jsp+servlet上传与下载

一、上传

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

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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class Upload extends HttpServlet {

	private static final long serialVersionUID = -2738873254241944233L;

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

		this.doPost(request, response);
	}

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

		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();		// 工厂

		// 获取上传文件存放的 目录 , 无则创建
		String path = "D:/servletUpload/";/* request.getRealPath( "/upload" ); */
		new java.io.File(path).mkdirs();
		
		diskFileItemFactory.setRepository(new File(path));
		diskFileItemFactory.setSizeThreshold(1024 * 1024);		// 设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室

		ServletFileUpload upload = new ServletFileUpload(diskFileItemFactory);
		try {
			// 上传多个文件
			List<FileItem> list = (List<FileItem>) upload.parseRequest(request);
			
			for (FileItem item : list) {
				String name = item.getFieldName();		// 表单中name值
				
				// 字符串类 属性
				String value = item.getName(); 			// 文件原名称
				
				if(value.trim().equals("")){
					continue;
				}
				
				int start = value.lastIndexOf("\\");				// 2,索引到最后一个反斜杠
				String filename = value.substring(start + 1);		// 截取(+1是去掉反斜杠)

				File file = new File(path, filename);
				item.write(file);	// 写到磁盘
				
				System.out.println("文件大小:" + item.getSize());
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

		response.getWriter().write("response 返回的内容");
	}

}

二、下载

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

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

import net.sf.json.JSONObject;

public class Download extends HttpServlet {

	private static final long serialVersionUID = -1217157202858492834L;

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

		this.doPost(request, response);
	}

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

		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");

		JSONObject json = new JSONObject();
		
		// 要下载的文件名
		String downloadfile = new String(request.getParameter("downFile").getBytes("ISO-8859-1"), "UTF-8");
		
		File file = new File("D:/servletUpload/" + downloadfile);

		if(file.exists()){
			
			long filesize = file.length();		// 文件的长度
			
			// 设置输出格式
			response.reset();
			response.addHeader("content-type", "application/x-msdownload;");
			response.addHeader("Content-Disposition", "attachment; filename=" + response.encodeURL(downloadfile));// 保存窗口中显示的保存文件名
			response.addHeader("content-length", Long.toString(filesize));
			
			if(filesize != 0){
				// 向客户端写入文件
				FileInputStream fin = new FileInputStream(file);
				byte[] b = new byte[2048];
				while ((fin.read(b)) > 0) {
					response.getOutputStream().write(b);
				}
				fin.close();
			}else{
				json.put("result", "failture");
				json.put("errorCode", "2");
				json.put("errorMsg", "文件大小为0");
				response.getWriter().write(json.toString());
			}
		}else{
			json.put("result", "failture");
			json.put("errorCode", "1");
			json.put("errorMsg", "文件不存在");
			response.getWriter().write(json.toString());
		}

	}

}

三、web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	
	<servlet>
		<description>上传servlet</description>
		<servlet-name>Upload</servlet-name>
		<servlet-class>Upload</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Upload</servlet-name>
		<url-pattern>/Upload</url-pattern>
	</servlet-mapping>
	
	<servlet>
		<description>下载servlet</description>
		<servlet-name>Download</servlet-name>
		<servlet-class>Download</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Download</servlet-name>
		<url-pattern>/Download</url-pattern>
	</servlet-mapping>
	

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>
</web-app>





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值