[学习笔记]jsp+javaBean 实现图片的上传

 

创建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>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值