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>