`
waynezhangww
  • 浏览: 10979 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Servlet的简单上传下载实现

阅读更多

UploadServlet.java

package com.wayne.upload;

import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

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

public class UploadServlet extends HttpServlet {

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String filepath = request.getRealPath("/upload_file") + "\\"; // 上传之后的文件保存在这个文件夹下
		String filename = "";
		ServletInputStream in = request.getInputStream();
		byte[] buf = new byte[4048];
		int len = in.readLine(buf, 0, buf.length); // 取出第一行
		String f = new String(buf, 0, len - 1); // 把第一行变成字符串,方便下面的匹配
		while ((len = in.readLine(buf, 0, buf.length)) != -1) {
			filename = new String(buf, 0, len);
			int i = filename.lastIndexOf("\\"); // 文件名以"\"开始,这个处理方式在Linux下就不行了,如果在Linux下运行,这个地方要修改一下。
			int j = filename.lastIndexOf("\""); // 文件名是以"""结尾的。
			// 处理多个框时,处理没有选择文件的框
			if (i == -1 || j == -1) {
				continue;
			}
			filename = filename.substring(i + 1, j);
			DataOutputStream fileStream = new DataOutputStream(
										  new BufferedOutputStream(
										  new FileOutputStream(filepath + filename)));
			len = in.readLine(buf, 0, buf.length); // 在处理信息时,这行信息不要
			len = in.readLine(buf, 0, buf.length); // 这行信息也不要
			while ((len = in.readLine(buf, 0, buf.length)) != -1) {
				String tempf = new String(buf, 0, len - 1);
				if (tempf.equals(f) || tempf.equals(f + "--")) { // 如果匹配,就说明信息结束了
					break; // 注意此行
				} else
					fileStream.write(buf, 0, len); // 写入
			}
			fileStream.close();
		}
		in.close();
		request.getRequestDispatcher("/view").forward(request, response);
	}
}

 

DownloadServlet.java

package com.wayne.upload;

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

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

public class DownloadServlet extends HttpServlet {
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String filepath = request.getRealPath("/upload_file") + "\\";
		String filename = request.getParameter("filename");
		filename = new String(filename.getBytes("iso-8859-1"),("GBK"));
		System.err.println(filename);
		OutputStream o = response.getOutputStream();
		byte b[] = new byte[4048];
		File fileLoad = new File(filepath, filename);
		response.setHeader("Content-disposition", "attachment;filename=" + new String(filename.getBytes("GBK"),("iso-8859-1")));
		response.setContentType("application/x-tar");
		long fileLength = fileLoad.length();
		String length = String.valueOf(fileLength);
		response.setHeader("Content_Length", length);
		FileInputStream in = new FileInputStream(fileLoad);
		int n = 0;
		while ((n = in.read(b)) != -1) {
			o.write(b, 0, n);
		}
	}

}

 

 

 

ViewServlet.java

package com.wayne.upload;

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

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

public class ViewServlet extends HttpServlet {

	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html");
		response.setCharacterEncoding("GBK");
		PrintWriter out = response.getWriter();
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>下载</TITLE>");
		out.println("  </HEAD>");		
		out.println("  <BODY>");		
		String filepath = request.getRealPath("/upload_file") + "\\";
		File file = new File(filepath);
		String[] filenames = file.list();
		for (int i = 0; i < filenames.length; i++) 
		{			
			out.println("<h3><a href=\"/updown/download?filename="+filenames[i]+"\">"+filenames[i]+"</a></h3>");
		}
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

}

 

 

 

 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>com.wayne.upload.UploadServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>DownloadServlet</servlet-name>
    <servlet-class>com.wayne.upload.DownloadServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>ViewServlet</servlet-name>
    <servlet-class>com.wayne.upload.ViewServlet</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/upload</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>DownloadServlet</servlet-name>
    <url-pattern>/download</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ViewServlet</servlet-name>
    <url-pattern>/view</url-pattern>
  </servlet-mapping>

</web-app>

 

 

 

upload.html

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=GBK">
        <title>上传文件</title>
    </head>
    <body>
    	<form action="/updown/upload" method="post" enctype="multipart/form-data">
    		请选择上传文件:
    		<input type="file" name="file" size="30" />
		<input type="submit" value="上传" />
    	</form>
    </body>
</html>

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics