处理附件上传的JSP页面与JAVA Bean
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!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=GB18030">
<jsp:useBean id="FUpload" scope="page" class="edu.scnu.crjy.common.UploadFiles"></jsp:useBean>

</head>


<body>

<%
String documentRoot = getServletContext().getRealPath("/");
String Dir = documentRoot+"appendfiles//"+request.getParameter("childDir");
out.println(request.getParameter("childDir"));
//保存文件的路径,请确保目录存在,或改到其他目录
//通过调用JavaBeans的方法完成上传操作
FUpload.setUploadDirectory(Dir);
FUpload.uploadFile(request);

%>
<script language="javascript">
alert("上传附件成功!");
document.location.href="../appendfileslist.jsp?childDir=<%=request.getParameter("childDir")%>"
</script>
</body>
</html>

注:这个处理上传的bean有大部分是从csdn中获得的资料
package edu.scnu.crjy.common;

import java.io.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletException;


public class UploadFiles ...{
private static String newline = " "; // 设定换行符

private String uploadDirectory = "."; // 默认的保存位置

private String ContentType = ""; // 文件类型

private String CharacterEncoding = ""; // 编码格式

// 设定文件要保存在服务器中的位置

public void setUploadDirectory(String s) ...{
uploadDirectory = s;
}

// 提取文件名,本方法是把用户上传的文件按照原名保存

private String getFileName(String s) ...{
int i = s.lastIndexOf("/");

if (i < 0 || i >= s.length() - 1) ...{
i = s.lastIndexOf("/");
if (i < 0 || i >= s.length() - 1)
return s;
}
return s.substring(i + 1);
}

// 得到content-type

public void setContentType(String s) ...{
ContentType = s;
int j;

if ((j = ContentType.indexOf("boundary=")) != -1) ...{
ContentType = ContentType.substring(j + 9);
ContentType = "--" + ContentType;
}
}

// 得到文件编码格式

public void setCharacterEncoding(String s) ...{
CharacterEncoding = s;
}

public void uploadFile(HttpServletRequest req) throws ServletException,

IOException ...{
setCharacterEncoding(req.getCharacterEncoding());
setContentType(req.getContentType());
uploadFile(req.getInputStream());
}

public void uploadFile(ServletInputStream servletinputstream)

throws ServletException, IOException ...{

String s5 = null;
String filename = null;
byte Linebyte[] = new byte[4096];
byte outLinebyte[] = new byte[4096];
int ai[] = new int[1];
int ai1[] = new int[1];

String line;
// 得到文件名
while ((line = readLine(Linebyte, ai, servletinputstream,

CharacterEncoding)) != null) ...{
int i = line.indexOf("filename=");

if (i >= 0) ...{
line = line.substring(i + 10);
if ((i = line.indexOf(""")) > 0)
line = line.substring(0, i);
break;
}
}

filename = line;

if (filename != null && !filename.equals(""")) ...{
filename = getFileName(filename);

String sContentType = readLine(Linebyte, ai, servletinputstream,
CharacterEncoding);
if (sContentType.indexOf("Content-Type") >= 0)
readLine(Linebyte, ai, servletinputstream, CharacterEncoding);

// 建立新文件的文件句柄
File file = new File(uploadDirectory, filename);

// 建立生成新文件的输出流
FileOutputStream fileoutputstream = new FileOutputStream(file);

while ((sContentType = readLine(Linebyte, ai, servletinputstream,

CharacterEncoding)) != null) ...{
if (sContentType.indexOf(ContentType) == 0 && Linebyte[0] == 45)
break;


if (s5 != null) ...{
// 写入新文件
fileoutputstream.write(outLinebyte, 0, ai1[0]);
fileoutputstream.flush();
}
s5 = readLine(outLinebyte, ai1, servletinputstream,
CharacterEncoding);
if (s5 == null || s5.indexOf(ContentType) == 0
&& outLinebyte[0] == 45)
break;
fileoutputstream.write(Linebyte, 0, ai[0]);
fileoutputstream.flush();
}

byte byte0;
if (newline.length() == 1)
byte0 = 2;
else
byte0 = 1;
if (s5 != null && outLinebyte[0] != 45
&& ai1[0] > newline.length() * byte0)
fileoutputstream.write(outLinebyte, 0, ai1[0]
- newline.length() * byte0);
if (sContentType != null && Linebyte[0] != 45
&& ai[0] > newline.length() * byte0)
fileoutputstream.write(Linebyte, 0, ai[0] - newline.length()
* byte0);
fileoutputstream.close();
}
}

// readLine函数把表单提交上来的数据按行读取
private String readLine(byte Linebyte[], int ai[],

ServletInputStream servletinputstream, String CharacterEncoding) ...{

try ...{ // 读取一行
ai[0] = servletinputstream.readLine(Linebyte, 0, Linebyte.length);
if (ai[0] == -1)
return null;

} catch (IOException ex) ...{
return null;
}

try ...{

if (CharacterEncoding == null) ...{
// 用默认的编码方式把给定的byte数组转换为字符串
return new String(Linebyte, 0, ai[0]);

} else ...{
// 用给定的编码方式把给定的byte数组转换为字符串
return new String(Linebyte, 0, ai[0], CharacterEncoding);
}

} catch (Exception ex) ...{
return null;
}
}
}
