创建Bean 的源文件
/**
* bean负责将用户选择的文件上传到服务器,
* bean 可以让内置对象request调用方法getInputStream 获得一个输入流
* 通过这个输入流读入客户上传的全部信息,包括文件的内容以及表单域
* 信息
* BEAN 可以从上传的全部信息中分离出文件的内容,并保存到服务器端
* 按照http协议,文件表单提交的信息中,前4行和后5行是表单本身的信息
* 中间部分才是用户提交的文件内容。
* bean通过使用randomAccessFile流获取文件的内容,即去掉表单的信息。
* 首先,bean将客户提供的全部信息保存为一个临时文件,该文件的名字是客户的session对象的id
* <(不同的客户的这个ID是不同的)
* 然后读取临时文件的第二行,这一行中包含有客户上传的文件的名字,获得这个民自,再
* 获得第4行结束的位置,以及倒数第6行的结束位置,因为这俩个位置之间的内容是上传文件内容
* 然后将这部分内容存入文件
* 该文件的名字和客户上传的名字保存一致
* 最后删除临时文件。
* */package cn.java;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.RandomAccessFile;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;public class UpFile {
HttpServletRequest request;
HttpSession session;
String upFileMessage="";
public void setRequest(HttpServletRequest request){
this.request=request;
}
public HttpSession getSession() {
return session;
}
public void setSession(HttpSession session) {
this.session = session;
}
public String getUpFileMessage() {
String fileName=null;
try{
String tempFileName=(String)session.getId();
System.out.println(tempFileName);
File f1=new File("F://apache-tomcat-5.5.20//apache-tomcat-5.5.20//webapps//long",tempFileName);
FileOutputStream o=new FileOutputStream(f1);
InputStream in=request.getInputStream();
byte b[]=new byte[10000];
int n;
while((n=in.read(b))!=-1){
o.write(b,0,n);
}
o.close();
in.close();
RandomAccessFile random=new RandomAccessFile(f1,"r");
int second=1; //读取f1的第2行,析取出长传文件的名字
String secondLine=null;
while(second<=2){
secondLine=random.readLine();
System.out.println("secondLine 的值为:"+secondLine);
second++;
}
//获得 第2行中目录符号‘/’最后出现的位置
System.out.println("secpmd"+secondLine);
int position=secondLine.lastIndexOf("//");
//客户上传的文件的名字是:
fileName=secondLine.substring(position+1,secondLine.length()-1);
System.out.println("xxxxxxxx"+fileName);
byte cc[]=fileName.getBytes("ISO-8859-1");
fileName=new String(cc);
session.setAttribute("Name",fileName); //供show.jsp页面使用
random.seek(0); //再定位到文件f1的开头
//获取第4行回车符号的位置
long forthEndPosition=0;
int forth=1;
while((n=random.read())!=-1&&(forth<=4))
{
if(n=='/n'){
forthEndPosition=random.getFilePointer();
System.out.println(forthEndPosition);
forth++;
}
}
//根据客户上传文件的名字,将该文件保存到磁盘上
File f2=new File("F://apache-tomcat-5.5.20//apache-tomcat-5.5.20//webapps//long",fileName);
RandomAccessFile random2=new RandomAccessFile(f2,"rw");
//确定出文件f1中包含客户上传得文件的内容的最后位置,即倒数第6行
random.seek(random.length());
long endPosition=random.getFilePointer();
long mark=endPosition;
int j=1;
while((mark>=0)&&(j<=6)){
mark--;
random.seek(mark);
n=random.readByte();
if(n=='/n'){
endPosition=random.getFilePointer();
j++;
}
}
//将random流指向文件f1的第4行结束的位置
random.seek(forthEndPosition);
long startPoint=random.getFilePointer();
//从f1读出客户上传得文件存入f2
//(读取从第4行结束位置到倒数第6行之间的内容)
while(startPoint<endPosition-1){
n=random.readByte();
random2.write(n);
startPoint=random.getFilePointer();
}
random2.close();
random.close();
f1.delete(); //删除临时文件
upFileMessage=fileName+" Successfully UpLoad";
return upFileMessage;
}catch(Exception exp){if(fileName!=null){
upFileMessage=fileName+" Fail to upload";
return upFileMessage;
}
else{
upFileMessage="";
return upFileMessage;
}
}}
public void setUpFileMessage(String upFileMessage) {
this.upFileMessage = upFileMessage;
}
public HttpServletRequest getRequest() {
return request;
}
}
//需要的jsp页面为
upfile.jsp
<%@page contentType="text/html;charset=gb2312"%>
<%@page import="cn.java.UpFile"%>
<jsp:useBean id="upFile" class="cn.java.UpFile" scope="session"/>
<html><body><p>选择要上传的文件:<br>
<form action="" method="post" enctype="multipart/form-data">
<input type=FILE name="body" size="45">
<br><input type="submit" name="g" value="提交">
</form>
<%
upFile.setRequest(request);
upFile.setSession(session);%>
<jsp:getProperty name="upFile" property="upFileMessage"/>
<p>如果上传的是图像文件,可单击超链接查看图像:
<br><a href="show.jsp">查看图像</a>
</body></html>//show.jsp
<%@page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="upFile" class="cn.java.UpFile" scope="session"/>
<html><body>
<%
String pic=(String)session.getAttribute("Name");
out.print(pic);
out.print("<image src="+pic+">");
%>
</body></html>