[学习笔记]jsp+javaBean 实现图片的上传
2008-03-30 22:54
791 查看
创建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>
相关文章推荐
- Node Js 实现图片上传 学习笔记
- [Silverlight学习笔记]实现上传图片功能时遇到的问题
- 安卓学习笔记---Retrofit2.0 实现图文(参数+图片)上传方法总结
- 【学习笔记⑥】ssh中利用struts实现图片的上传功能
- JFinal学习笔记(四) 实现简单的图片上传
- xhEditor在线编辑器学习笔记(1)---用Struts2+ajax实现图片上传
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- ExtJS4学习笔记四--图片上传
- Android(java)学习笔记201:网络图片浏览器的实现(ANR)
- JSP学习笔记(4)-Javabean
- JSP实现数据保存(web基础学习笔记四)
- 云计算学习笔记004---hadoop的简介,以及安装,用命令实现对hdfs系统进行文件的上传下载
- JSP Ueditor 实现图片跨域上传
- Servlet+Jsp实现图片或文件的上传功能具体思路及代码
- php学习笔记:利用gd库生成图片,并实现随机验证码
- Android 实现图片缓存异步加载框架学习笔记
- 【微信开发学习笔记(二)】:上传图片后显示不了
- 安卓学习笔记---自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示(矩形圆角加边框)
- ExtJS4学习笔记四--图片上传