JSP文件上传-二进制流详解

JSP文件上传-二进制流详解
JSP文件上传-二进制流详解

JSP文件上传

一、先做选择上传文件页面chose.jsp,比较简单。

代码如下:

关键代码是:

选择文件后的上传由upfile.jsp网页来处理;整个表单内容以post方式传递;表单中包含的所有内容,包括文件都会以enctype="multipart/form-data"二进制形式传给服务器。

注意JSP网页里不同的编码形式声明:

charset=gb2312表示网页中包含的内容(比如文件)以简体中文编码;

pageEncoding="UTF-8"表示JSP网页源代码本身是UTF-8编码。

因为表单form的内容会以二进制形式传到服务器,就必须用

charset=gb2312指定这个二进制是以中文简体来编码的,这样传上去以后真正处理上传和存储的upfile.jsp页才能看懂识别中文文件名!

选择文件页面比较简单,关键是编码的申明,必须说清楚,不然到时候中文文件名就会乱码。

二、upfile.jsp页用来接收和处理以二进制形式传给服务器的数据流。

1、二进制数据流的基本信息。

还是用request对象帮我们取从客户端传过来的各种信息,先取二进制数据流的整体长度,就是传过来文件的大小了,单位是字节。

int formDataLength = request.getContentLength();

我们可以设置能接收的最大文件大小,比如下面,就是10M。

int MAX_SIZE = 10*1024*1024;

再取传过来的二进制数据流类型,不知道里面是什么鬼?

String contentType = request.getContentType();

不要紧,我们打出来看看就知道了,out.print编程时非常有用,随时打出来瞅瞅。

out.print(contentType);会看到下面这个:

主要就是要后面的这个东西

一个表单form可能选了多个文件,全部在一个二进制数据流里面一起传过来,那么文件数据之间都用这个间隔boundary隔开的。通过它才可以在二进制数据流中找到一个文件的开始和结束位置,从而将文件数据正确取出并保存到服务器里。

一个字节的位置错误都会造成文件保存出错!所以文件保存的最关键就是要找准位置,错一个字节都不行。

2、接收传过来的二进制数据流。

用InputStream对象来接收整个传过来的二进制数据:

InputStream in=request.getInputStream();

内存中新建二进制数组,跟整个传过来的二进制数据流一样大小:

byte dataBytes[] = new byte[formDataLength];

将上传的全部二进制数据全部读到(保存到)dataBytes字节数组里:

in.read(dataBytes,0,formDataLength);

in.close();//记得关掉内存中的in对象,回收资源

将上传上来的全部内容由dataBytes字节数组转换为可见的字符串:

String file = new String(dataBytes);

3、探析二进制数据流。

继续用我们很厉害的out.print来看看,转换为字符串后的二进制数据流里面到底是些什么东西。

out.print(file.substring(0,1000));

取file字符串的前1000个字符,看看里面的基本结构就可以了。

非常重要的函数substring(begin,end),就是取begin到end之间的子字符串,begin和end分别是子串起、止位置的下标。

以间隔开始;接着就是文件的基本(包括文件名,类型等);最后看不懂的就是上传文件的二进制内容。文件内容也将会以间隔结束。

因为不同文件编码很复杂,这里我们直接页面展示肯定是乱码(只有txt文本文件才是直接utf-8,gb2312这样编码,其他文件都会自己另外重编,所以用

网页直接打开都会是这样的乱码。)

知道间隔是什么样的,知道文件名在哪里,也知道哪些是文件内容。就可以对二进制数据流进行正确截取,实现文件上传和存储了。

4、在二进制数据流中取出文件名、扩展名、间隔字符串。

int fNbg = file.indexOf("filename=\"")+10;

找到在file字符串的起始位置!indexof函数就是找子字符串在大字符串中的其实位置的。\是转义字符,\”表示引号,+10是要找到”的位置。从f到”刚好10个字符。

int fNEd = file.indexOf("Content-Type:")-3;

,反引号”在前面3个位置。

文件名的起始位置,结束位置都找到了,就可以取出来了。

String fileName= file.substring(fNbg,fNEd);

Substring函数就是截取file字符串指定起、止位置的子字符串。

out.print(fileName);

打出来看看,文件名对不对。

继续,取出间隔boundary。

int budyBg = file.indexOf("-");

int budyEd = file.indexOf("\n")-1;

String boundary = file.substring(budyBg,budyEd);

在file文件中最开始就是boundary,结束标记是回车换行\n。

这就是文件数据流前后的间隔,开始是这个,结束也是这个。

同样,可以取出文件的扩展名:

int extBg = fileName.indexOf(".")+1;

int extEd = fileName.length();

String extName = fileName.substring(extBg,extEd);

out.print(extName);

5、在二进制数据流中取出真正的文件内容。

每个文件的二进制数据流前后都是间隔boundary,但是数据流最开始部分

是文件信息,不能直接存到文件里,真正的文件内容开始是在后面还要三句话(三个回车换行\n)之后。

int pos;

从开始找文件内容起始位置:

pos = file.indexOf("filename=\"");

往后的第一个回车换行\n:

pos = file.indexOf("\n",pos) + 1;

往后的第二个回车换行\n:

pos = file.indexOf("\n",pos) + 1;

往后的第三个回车换行\n:

pos = file.indexOf("\n",pos) + 1;

找到了文件内容的起始位置,就是这里,它前面有联系两个\n。

文件内容的结束位置,当然就是后面一个间隔的开始位置:

int boundaryLocation = file.indexOf(boundary,pos) - 4;

注意,这些位置坐标都是在file字符串的绝对位置,从0开始。每次都从前一次的pos开始再往后找。

文件内容的真正开始位置,要转成二进制字节计数:

int startPos = ((file.substring(0,pos)).getBytes()).length;

文件内容的真正结束位置,要转成二进制字节计数:

int endPos = ((file.substring(0,boundaryLocation)).getBytes()).length;

先确定服务器上的路径和文件名:

String jspcurpath=application.getRealPath(request.getRequestURI()); String curdir=new File(jspcurpath).getParent();

String path=curdir + "\\upfile";

File d=new File(path);

if(!(d.exists())){//如果指定目录不存在

d.mkdir();//则建立upfile目录

}

String savefileName = path + "\\"+ fileName;

File checkFile = new File(savefileName);

if(checkFile.exists()){

checkFile.delete();

}

再利用FileOutputStream对象开始截取二进制数据,写入指定文件。FileOutputStream fileOut = new FileOutputStream(savefileName);

fileOut.write(dataBytes,startPos,(endPos - startPos));

最后,记得关掉FileOutputStream对象。

fileOut.close();

文件上传的关键就在于二进制数据流中各种内容起、止位置的确定,一定要好好体会。

字节数组转换为字符串再定位截取内容,会产生一些问题,并不精确,所以最好就是直接在二进制字节数组里面定位截取。不用上面的方法,我们另做一个upfile.jsp文件。

自己写一个函数,在字节数组中定位一个子串的位置下标。

<%!

//该函数功能为:从下标offset位置开始,在字节数组Src中找到第一个Des子串的起始位置,返回其在Src数组中的下标public static int ByteIndexOf(byte Src[],byte

Des[],int offset)

{

int i=offset; //Src数组从下标offset开始对比

int j=0; //Des数组从下标0开始对比

int subBg = -1; //-1表示尚没有找到子串

int DesLength = Des.length;//Src数组的长度

int SrcLength = Src.length;//Des数组的长度

while(j

{

if(Src[i]==Des[j]){ //如果两个数组的当前字节一样i++;

j++; //i在Src数组中往后走一个,j在Des数组中往

后走一个,返回循环继续对比

}

else{ //如果两个数组的当前字节不一样

if(j>0) //如果Des数组的当前下标j大于零,表示Src数组已经找到与Des数组前几个字节相同的子串,但是没有全部匹配,要重新开始

j=0; //则j回到Des数组的第0个字节;而i继续停在Src数组当前位置,返回循环与Des数组的第0个字节重新开始比else{ //如果Des数组的当前下标j仍是0,表示Src数组一直没有找到与Des数组匹配的第一个字节

i++; //则i继续在Src数组中往后走,返回循环继续与Des数组的第0个字节比对

j=0; //确保Des数组当前下标j回到0

}

}

}

if(j==DesLength && i

subBg=i-DesLength; //子串在Src数组中的其实位置下标就是当前位置i减去DesLength

else //循环结束,如果j下标没有达到Des数组长度,表示

未找到子串

subBg=-1; //值为-1,表示未找到指定子串

return(subBg); //返回子串的其实位置,如果是-1则表示没有指定的子串

}

%>

函数写好后,主程序如下:

<%

int MAX_SIZE = 10*1024*1024;

int formDataLength = request.getContentLength();

try{

if(formDataLength<=MAX_SIZE){

if(formDataLength>200){

InputStream in=request.getInputStream();

//将上传的数据流全部保存在byte数组中

byte dataBytes[] = new byte[formDataLength];

int byteRead = 0;

int totalBytesRead = 0;

//以1024字节为单位,循环读出InputStream数据流,存到dataBytes[]字节数组里

while(totalBytesRead < formDataLength){

byteRead =

in.read(dataBytes,totalBytesRead,1024);

totalBytesRead += byteRead;

}

in.close();//读出来后,就关掉InputStream数据流对象in

//在二进制字节数组里面直接定位各种信息内容的位置,以及截取

byte FenGe[] ={13,10}; //这个字节数组放的就是回车换行,13是回车字符的AscII码,10是换行字符的AscII码

int Budbg = 0; //数据流一开始就是间隔,间隔开始位置就是下标0

int BudEd = ByteIndexOf(dataBytes,FenGe,0); //间隔的结束是一个回车换行,结束位置用函数ByteIndexOf获取

int Budlg = BudEd - Budbg; //间隔的长度

byte Budery[]=new byte[Budlg];//间隔字节数组,用来放间隔的字节二进制数据

System.arraycopy(dataBytes,0,Budery,0,Budlg);//用arraycopy从dataBytes的0位置开始中截取出长度为Budlg的间隔出来

//放到Budery从0开始的位置,字节数组Budery现在就放的是文件间隔字符串了

String flbg = "filename=\""; //文件名的开始标记

byte FNbgB[] = flbg.getBytes(); //文件名的开始标记转换为二进制字节数组

int fnameBg = ByteIndexOf(dataBytes,FNbgB,0)+10;//用函数ByteIndexOf帮助定位文件名开始位置下标

byte FNedB[] = {13,10}; //文件名的结束标记也是回车换行

int fnameEd =

ByteIndexOf(dataBytes,FNedB,fnameBg)-1; //用函数ByteIndexOf帮助定位文件名结束位置下标,-1是因为末尾还有一个

双引号

int FnLen = fnameEd - fnameBg;

byte File_Name[] = new byte[FnLen];//将文件名放入这个字节数组

System.arraycopy(dataBytes,fnameBg,File_Name,0,FnLen) ;//用arraycopy从dataBytes中截取出文件名

String filename = new String(File_Name); //文件名是字符串,将字节数组转为字符串,得到真正文件名

byte FileFenGe[] ={13,10,13,10};//文件头信息是以连续两个回车换行结束的

int Filebg =

ByteIndexOf(dataBytes,FileFenGe,BudEd+2)+4; //用函数ByteIndexOf继续往后获取这连续两个回车换行的位置

//真正的文件内容在这连续两个回车换行之后

//文件流内容的结束是以间隔字节数组Budery为标记的int FileEd =

ByteIndexOf(dataBytes,Budery,Filebg)-2;//用函数ByteIndexOf继续往后获取文件结束间隔的位置,-2是因为前面又有

一个回车换行

int Filelen = FileEd - Filebg; //真正文件内容的长度

String

jspcurpath=application.getRealPath(request.getRequest URI());

String curdir=new File(jspcurpath).getParent();

String path=curdir + "\\upfile";

File d=new File(path);

if(!(d.exists())){//如果指定目录不存在

d.mkdir();//则建立upfile目录

}

String savefileName = path + "\\"+ filename;

//out.print(fileName);

File checkFile = new File(savefileName);

if(checkFile.exists()){

checkFile.delete();

}

FileOutputStream fileOut = new

FileOutputStream(savefileName);

fileOut.write(dataBytes,Filebg,Filelen);

fileOut.close();

out.print("文件上传成功!");

}

else{

out.print("文件不存在,无法上传!");

}

}

else{

out.print("文件超过10M限额,无法上传!"); }

}

catch(IOException e){

out.print("upload error.");

e.printStackTrace();

}

%>

需要源代码的请百度华夏电商,来专业博客下载。

jsp中实现一个页面纯io流上传文件

jsp中实现一个页面纯io流上传文件 <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@page import="java.io.*"%> <%@page import="java.sql.*"%> My JSP 'Xs.jsp' starting page <%! //此方法用于将指定的文本转换成ISO-8859-1字符编码格式 public String codeToString(String str) { String s = str; try { byte tempB[] = s.getBytes("ISO-8859-1"); s = new String(tempB); return s; } catch (Exception e) { return s; } } %> <% //声明一个临时文件名 String tempFileName = new String("tempFileName1"); //在D盘建立一个临时文件,名为tempFileName File tempFile1 = new File("D:/", tempFileName); //根据指定的这个临时文件,来创建一个文件字节输出流(用于向磁盘写文件) FileOutputStream outputFile1 = new FileOutputStream(tempFile1); //由返回一个文件字节输入流(用于读文件) InputStream fileSource1 = request.getInputStream(); //实例一个字节数组初始为1000kb byte b[] = new byte[1000]; int n; //利用while循环,先读出这个文件大小,判断为不为-1,如果不为-1就输出数据,向磁盘写文件数据 while ((n = fileSource1.read(b)) != -1) { outputFile1.write(b, 0, n); //将 n 个字节从b字节数组写入到outputFile1文件,偏移量从0开始 } //关闭文件输出流 outputFile1.close(); //关闭文件输入流 fileSource1.close(); //实例化一个RandomAccessFile 对象.创建从中读取和向其中写入(可选)的随机存取文件流,该文件由 File 参数指定。 //将创建一个新的 FileDescriptor 对象来表示此文件的连接。 //mode 参数指定用以打开文件的访问模式。允许的值及其含意为:

Apache FileUpload 四种方式实现文件上传

将Apache的commons-fileupload.jar放在应用程序的WEB-INF\lib下,即可使用。下面举例介绍如何使用它的文件上传功能。 所使用的fileUpload版本为1.2,环境为Eclipse3.3+MyEclipse6.0。FileUpload 是基于Commons IO的,所以在进入项目前先确定Commons IO的jar包(本文使用commons-io-1.3.2.jar)在WEB-INF\lib下。 此文作示例工程可在文章最后的附件中下载。 示例1 最简单的例子,通过ServletFileUpload静态类来解析Request,工厂类FileItemFactory会对mulipart类的表单中的所有字段进行处理,不只是file字段。getName()得到文件名,getString ()得到表单数据内容,isFormField()可判断是否为普通的表单项。 demo1.html File upload //必须是multipart的表单数据。 Your name:

File:


demo1.jsp <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@ page import="https://www.360docs.net/doc/3415084236.html,mons.fileupload.*"%> <%@ page import="https://www.360docs.net/doc/3415084236.html,mons.fileupload.servlet.*"%> <%@ page import="https://www.360docs.net/doc/3415084236.html,mons.fileupload.disk.*"%> <%@ page import="java.util.*"%> <% boolean isMultipart = ServletFileUpload.isMultipartContent(request);//检查输入请求是否为multipart表单数据。 if (isMultipart == true) { FileItemFactory factory = new DiskFileItemFactory();//为该请求创建一个

jsp实现文件上传和下载(代码及说明)

特点: 1.可以多文件上传; 2.返回上传后的文件名; 3.form表单中的其他参数也可以得到。先贴上传类,JspFileUpload package com.vogoal.util; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Hashtable; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; /* * vogoalAPI 1.0 * Auther SinNeR@https://www.360docs.net/doc/3415084236.html, * by https://www.360docs.net/doc/3415084236.html, * mail: vogoals@hotm https://www.360docs.net/doc/3415084236.html, */ /** * JSP上传文件类 * * @author SinNeR * @version 1.0 */ public class JspFileUpload { /** request对象*/

private HttpServletRequest request = null; /** 上传文件的路径*/ private String uploadPath = null; /** 每次读取得字节的大小*/ private static int BUFSIZE = 1024 * 8; /** 存储参数的Hashtable */ private Hashtable paramHt = new Hasptable(); /** 存储上传的文件的文件名的ArrayList */ private ArrayList updFileArr = new ArrayList(); /** * 设定request对象。 * * @param request * HttpServletRequest request对象 */ public void setRequest(HttpServletRequest request) { this.request = request; } /** * 设定文件上传路径。 * * @param path * 用户指定的文件的上传路径。 */ public void setUploadPath(String path) { this.uploadPath = path; } /** * 文件上传处理主程序。 �������B * * @return int 操作结果0 文件操作成功;1 request对象不存在。2 没有设定文件保存路径或者

JSP上传图片到数据库的例子

现在想写个程序 向数据库中插入图片路径(或则插入图片也可以) 最好是插入图片的路径这样可插入任意大的图片... 请高手指点一下思路.. 感激不尽 1.通过显示层向数据库中插入图片 2.在界面显示的时候是小图片(缩小过的) 3.当点击查看大图片会显示图片(原来的大小) 提供给你图片上传和显示的代码吧!希望对你有帮助 我在程序代码里贴了向Mysql数据库写入image代码的程序,可是好多人都是Java的初学者,对于这段代码,他们无法将它转换成jsp,所以我在这在写一下用jsp怎样向数据库写入图像文件。大家先在数据库建这样一张表,我下面的这些代码对任何数据库都通用,只要支持blob类型的 只要大家将连接数据库的参数改一下就可以了。 SQL> create table image(id int,content varchar(200),image blob); 如果在sqlserver2000的数据库中,可以将blob字段换为image类型,这在SqlServer2000中是新增的。 testimage.html文件内容如下: Image File



我们在Form的action里定义了一个动作testimage.jsp,它的内容如下: <%@ page contentType= "text/html;charset=gb2312 "%> <%@ page import= "java.sql.* " %> <%@ page import= "java.util.* "%> <%@ page import= "java.text.* "%> <%@ page import= "java.io.* "%>

jsp 图片上传功能实现原创

package com.lsl.util; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * * @author Administrator * 图像处理类 */ public class PicCompression { /** * 压缩图片方法 * * @param oldFile * 将要压缩的图片的绝对地址 * @param width * 压缩宽 * @param height * 压缩长 * @param quality * 压缩清晰度建议为1.0 * @param smallIcon * 压缩图片后,添加的扩展名 * @return */ public String zoom(String oldFile, int width, int height, float quality) { if (oldFile == null) { return null; } String newImage = null; try { File file = new File(oldFile);

JSP中上传图片 完整代码

upfile.jsp

uploadimage.jsp uploadimage.jsp
 <%@ page language="java" pageEncoding="gb2312"%> <%@ page import="java.io.*,java.awt.image.*,com.sun.image.codec.jpeg.*,jav a.sql.*,com.jspsmart.upload.*,java.util.*"%> <%@ page import="mainClass.*"%>   My JSP'uploadimage.jsp' starting page   <% S martUpload sma = new SmartUpload(); l ong file_max_size = 4000000; S tring filename1 = "", ext = "", testvar = ""; S tring url = "uploadfiles/"; s ma.initialize(pageContext); t ry { sma.setAllowedFilesList("jpg,gif"); sma.upload(); }catch (Exception e) { %>

JSP文件上传-二进制流详解

JSP文件上传 一、先做选择上传文件页面chose.jsp,比较简单。 代码如下: 关键代码是:

选择文件后的上传由upfile.jsp网页来处理;整个表单内容以post方式传递;表单中包含的所有内容,包括文件都会以enctype="multipart/form-data"二进制形式传给服务器。 注意JSP网页里不同的编码形式声明: charset=gb2312表示网页中包含的内容(比如文件)以简体中文编码; pageEncoding="UTF-8"表示JSP网页源代码本身是UTF-8编码。 因为表单form的内容会以二进制形式传到服务器,就必须用

charset=gb2312指定这个二进制是以中文简体来编码的,这样传上去以后真正处理上传和存储的upfile.jsp页才能看懂识别中文文件名! 选择文件页面比较简单,关键是编码的申明,必须说清楚,不然到时候中文文件名就会乱码。 二、upfile.jsp页用来接收和处理以二进制形式传给服务器的数据流。 1、二进制数据流的基本信息。 还是用request对象帮我们取从客户端传过来的各种信息,先取二进制数据流的整体长度,就是传过来文件的大小了,单位是字节。 int formDataLength = request.getContentLength(); 我们可以设置能接收的最大文件大小,比如下面,就是10M。 int MAX_SIZE = 10*1024*1024; 再取传过来的二进制数据流类型,不知道里面是什么鬼? String contentType = request.getContentType(); 不要紧,我们打出来看看就知道了,out.print编程时非常有用,随时打出来瞅瞅。 out.print(contentType);会看到下面这个: 主要就是要后面的这个东西 一个表单form可能选了多个文件,全部在一个二进制数据流里面一起传过来,那么文件数据之间都用这个间隔boundary隔开的。通过它才可以在二进制数据流中找到一个文件的开始和结束位置,从而将文件数据正确取出并保存到服务器里。 一个字节的位置错误都会造成文件保存出错!所以文件保存的最关键就是要找准位置,错一个字节都不行。

JSP文件上传

UploadExample.jsp <%@ page contentType="text/html;charset=gb2312"%> <%= application.getServerInfo() %> 上传文件程序应用示例 <%-- 类型enctype用multipart/form-data,这样可以把文件中的数据作为流式数据上传,不管是什么文件类型,均可上传。--%> 请选择要上传的文件

doUpload.jsp

<%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.io.*"%> <%@ page import="java.util.*"%> <%@ page import="javax.servlet.*"%> <%@ page import="javax.servlet.http.*"%> upFile <% //定义上载文件的最大字节 int MAX_SIZE = 102400 * 102400; // 创建根路径的保存变量 String rootPath; //声明文件读入类 DataInputStream in = null; FileOutputStream fileOut = null; //取得客户端的网络地址 String remoteAddr = request.getRemoteAddr(); //获得服务器的名字 String serverName = request.getServerName();

jsp多文件上传到数据库

数据库的创建: 数据库名叫:csdn 表名:savepicture DROP TABLE IF EXISTS `savepicture`; CREA TE TABLE `savepicture` ( `id` int(10) NOT NULL auto_increment, `picture` blob NOT NULL, PRIMARY KEY(`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 好动手创建工程啦: 其实非常简单,一看就明白。把需要的包该导的都导了就行了。接着我们创建上传页面: <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%>

File Upload

上传图片
图片路径:
很简单,就是个上传框和按钮,别的没有了。至于一些css就是稍微的装饰装饰,一会也在下面写上!

jsp实现word文档的上传在线预览下载

JSP实现word文档的上传,在线预览,下载 前两天帮同学实现在线预览word文档中的内容,而且 需要提供可以下载的链接!在网上找了好久,都没有什么可行的方法,只得用最笨的方法来实现了。希望得到各位大神的指教。下面我就具体谈谈自己的实现过程,总结一下学习中的收获。 我相信很多程序员都遇到过,有些word文档希望直接在浏览器中打开进行预览,但是浏览器往往不是很配合,直接就提示下载,不像pdf文档,浏览器可以直接进行预览。Word文档甚至始终都会通过本地的Office软件打开。那么,问题来了,如何可以在线浏览word文档呢? 其实,我在最初的时候也没有接触过这方面的东西,一般用的比较多的是生成pdf文档,而浏览器一般都支持pdf 的浏览,因此,直接通过后台传来的数据,再利用java和一些相关的jar包就可以生产一个pdf文档,在浏览器中可以 直接显示。尽管可以这样,但是我们需要的是解决实际问题啊?在浏览器中打开word文档。 在网上查了一些资料,也都没有查出个所以然。看了好几个博客和论坛,也都是大同小异,测试了好几个,基本都是浏览器提示直接下载,或者打开,这里的打开也都是利用本地的Office软件打开的,所以这并不是自己想要的结果。

于是,自己动手,既然浏览器不支持显示word文档,我何不将word文档按照原来word的样式和内容转为html呢?而在浏览器中,html是再熟悉不过了。基本思路就是这样,首先是利用上传的word文档转为html文件,然后生成的链接显示在jsp页面上,如果点击显示该word文档,那么实际上浏览器读取的是刚生成的html文件。 下面将自己的实现过程总结如下,欢迎各位朋友提供更好的解决办法。转载本文请在文章明显位置标明文章的原始出处,个人博客:https://www.360docs.net/doc/3415084236.html, 邮箱: it_red@https://www.360docs.net/doc/3415084236.html, 1. Word文档转为html 这里采用第三方组件jacob来实现的,本demo所用的版本为jacob-1.18-M2;下载链接为: http://sourceforge.jp/projects/sfnet_jacob-project/releases/ 先在这里说一下,用这个组件还是比较麻烦的,首先要根据自己的电脑实际情况将压缩包里面的动态链接库 放到多个目录下,而这个动态链接库为: 将其复制的位置分别是: C:\Windows\System32 机器所安装的java目录下的jdk下的bin中

ssh框架中jsp上传图片功能的实现

jspsmart的使用 上传 // 新建一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 上传初始化 su.initialize(pageContext); // 限制每个上传文件的最大长度。 su.setMaxFileSize(10000); // 限制总上传数据的长度。 su.setTotalMaxFileSize(20000); // 设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。 su.setAllowedFilesList("doc,txt"); // 设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat, //jsp,htm,html扩展名的文件和没有扩展名的文件。 su.setDeniedFilesList("exe,bat,jsp,htm,html,,"); // 上传文件 su.upload(); // 将上传文件全部保存到指定目录 int count = su.save("/upload"); 下载 // 新建一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 初始化 su.initialize(pageContext); // 设定contentDisposition为null以禁止浏览器自动打开文件, //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为 //doc时,浏览器将自动用word打开它。扩展名为pdf时, //浏览器将用acrobat打开。 su.setContentDisposition(null); // 下载文件 su.downloadFile("/upload/test.doc"); 应用实例: uploadimage.jsp <%@ page contentType="text/html;charset=gb2312" language="java" import="java.io.*,java.awt.Image,java.awt.image.*,com.sun.image.codec.jpeg.*,java.sql.*,com.js psmart.upload.*,java.util.*"%> <%

JSP案例开发集锦

第一章:JSP与HTML 案例1:动态设置网员背景图片 案例2:用JSP定制主页 案例3:表格应用实例 案例4:网页中文乱码问题的解决方案 案例5:JSP与CSS结合应用 第二章:JSP与字符串 案例1:显示不同大小的“你好Jsp”字符串中文的问题案例2:JSP中对字符串的处理及其扩展 案例3:实现文本模糊查找 案例4:JSP汉字转码 案例5:设置JSP异常处理 案例6:分割字符串 案例7:清除字符串中指定的字符 案例8:如何取得汉字的区位码 案例9:字符串中包含双引号 第三章:JSP与图像 案例1:JSP生成jpeg图片用于投票 案例2:记数器的实现 案例3:JSP中定义函数实现特例 第四章:JSP与数据库 案例1:基本的数据库连接实例 案例2:JDBC 实例 案例3:数据库访问JavaBean 实例 案例4:单记录浏览数据 案例5:分页显示 案例6:编程实现记录编辑 案例7:创建数据报表 案例8:系统登录系统 案例9:SQL创建和修改数据库 案例10:图形显示数据库表中的数据信息 案例11:将图片添加到数据中 案例12:定制标签实例 案例13:扩展标签实例 案例14:综合实例――学生管理系统 第五章:JSP与EJB 案例1:封装数据源 案例2:Enterprise JavaBeans的处理文件 案例3:实现EJBObject文件 案例4:实现EJBHome文件 案例5:一个javabean轻松实现数据库操作 案例6:在电子商务中的应用 案例7:动态日历 案例8:DIR计算器 第六章:JSP与Web

案例1:Telnet 服务 案例2:SMTP 服务 案例3:FTP 服务 案例4:News 服务 案例5:查询主机和本机的IP 案例6:环境列表 案例7:JavaMail API发送电子邮件 案例8:jspSmartUpload上传下载全攻略 案例9:留言本程序 案例10:聊天室程序 案例11:浏览器程序 第七章:JSP与XML 案例1:XML简单示例 案例2:Tag Library 开发与应用实例 案例3:JSP与Tag Library和XML的结台应用案例4:投票器 案例5:jsp操作Execl分析 第八章:JSP与JavaScript的结台应用 案例1:文件的读取 案例2:获取文件或文件夹属性 案例3:显示盘中所有的目录 案例4:用JSP实现文件查找功能 案例5:实现目录遍历 案例6:文件管理器 案例7:记事本 案例8:中文显示服务端日期 案例9:判断服务端时间并显示中文问候 案例10:打印文件 第九章:JSP综合实例 综合实例1:论坛和社区 综合实例2:酒店管理系统 综合实例3:搜索引擎 综合实例4:购物车 综合实例5:后台管理系统 综合实例6:新闻发布系统 综合实例7:网络考试

jspSmartUpload使用文档

一、安装篇 jspSmartUpload是由https://www.360docs.net/doc/3415084236.html,网站开发的一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中。该组件有以下几个特点: 1、使用简单。在JSP文件中仅仅书写三五行JAVA代码就可以搞定文件的上传或下载,方便。 2、能全程控制上传。利用jspSmartUpload组件提供的对象及其操作方法,可以获得全部上传文件的信息(包括文件名,大小,类型,扩展名,文件数据等),方便存取。 3、能对上传的文件在大小、类型等方面做出限制。如此可以滤掉不符合要求的文件。 4、下载灵活。仅写两行代码,就能把Web服务器变成文件服务器。不管文件在Web服务器的目录下或在其它任何目录下,都可以利用jspSmartUpload进行下载。 5、能将文件上传到数据库中,也能将数据库中的数据下载下来。这种功能针对的是MYSQL 数据库,因为不具有通用性,所以本文不准备举例介绍这种用法。 jspSmartUpload组件可以从https://www.360docs.net/doc/3415084236.html,网站上自由下载,压缩包的名字是jspSmartUpload.zip。下载后,用WinZip或WinRAR将其解压到Tomcat的webapps目录下(本文以Tomcat服务器为例进行介绍)。解压后,将webapps/jspsmartupload目录下的子目录Web-inf名字改为全大写的WEB-INF,这样一改jspSmartUpload类才能使用。因为Tomcat对文件名大小写敏感,它要求Web应用程序相关的类所在目录为WEB-INF,且必须是大写。接着重新启动Tomcat,这样就可以在JSP文件中使用jspSmartUpload组件了。 注意,按上述方法安装后,只有webapps/jspsmartupload目录下的程序可以使用jspSmartUpload组件,如果想让Tomcat服务器的所有Web应用程序都能用它,必须做如下工作: 1.进入命令行状态,将目录切换到Tomcat的webapps/jspsmartupload/WEB-INF目录下。2.运行JAR打包命令:jar cvf jspSmartUpload.jar com (也可以打开资源管理器,切换到当前目录,用WinZip将com目录下的所有文件压缩成jspSmartUpload.zip,然后将jspSmartUpload.zip换名为jspSmartUpload.jar文件即可。) 3.将jspSmartUpload.jar拷贝到Tomcat的shared/lib目录下。 二、相关类说明篇 ㈠File类 这个类包装了一个上传文件的所有信息。通过它,可以得到上传文件的文件名、文件大小、扩展名、文件数据等信息。

jsp实现文件上传和下载

1 JSP文件上传简单实例 1、index.html代码: 上传图片

2、使用到的函数和类说明 File类文件和目录路径名的抽象表示形式, File(parent,child)方法根据parent 抽象路径名和child 路径名字符串创建一个新File实例FileOutputStream文件输出流,InputStream输入流,将输入数据看成一根管道,可以形象的将输入流比喻成管道的入口,而输出流比喻成管道的出口。 read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个字节数组中。read() 从此输入流中读取一个数据字节。 write(int b) 将指定字节写入此文件输出流,write(byte[] b, int off, int len) 将指定字节数组中从偏移量off 开始的len 个字节写入此文件输出流。write(byte[] b) 将 b.length 个字节从指定字节数组写入此文件输出流中 Random.readLine()逐行读入,Random.seek(int pos)设置到此文件开头测量到的文件指针偏移量,该位置发生下一个读取和写入操作,Random.getFilePointer()返回此文件当前偏移量,Random.readByte()此方法从该文件的当前文件指针开始读取第一个字节。 https://www.360docs.net/doc/3415084236.html,stIndexOf(char c)返回最后一次出现的指定字符在此字符串中的索引 3、do_upload.jsp <%@ page contentType="text/html;charset=gb2312" language="java"%> <%@ page import="java.io.*"%> 上传 <% try{ String temp=(String)session.getId();//获得sessionId File f1=new File((String)request.getRealPath("photo")+"/",temp); //获得photo所在的目

JSP 实现多个文件上传的两种方法

JSP 实现多个文件上传的两种方法 JSP实现文件上传的实现方式是这样的:使用ServletRequest类的getInputStream()方法获得一个客户端向服务器发出的数据流,然后处理这个数据流,从中分析得到文件上传中传递到服务器的各个参数和数据,然后将其中的文件数据存储为一个文件或插入到数据库中。 通常JSP页面中不处理文件的上传功能,而是把这些功能放到Servlet 或JavaBean中去实现。使用Servlet完成文件上传的例子在其他JSP书籍中有所介绍,这里只介绍使用JeanBean是如何完成文件上传的。 JSP中实现文件的上传可以采用两种方式即采用HTTP协议和FTP协议实现,二者在传输的原理上存在很大的差异。以下将结合源代码对它们的实现做简单介绍,相信读者会从中有所收获。 在JSP中使用JavaBean实现基于Web的文件上传功能一般需要三种文件结合完成。这三种文件分别是提供界面的HTML页面文件、完成调用实现上传功能的JavaBean的JSP文件和实现JavaBean的Java的类文件。 1.采用HTTP协议实现多个文件的上传 在过去的HTML页面中,表单不能实现文件的上传,这多少限制了一些网页的功能。RFC1867规范(即HTML中实现基于表单的文件上传)对表单作出了扩展,增加了一个表单元素(input type=file)。通过使用这个元素,浏览器会自动生成一个输入框和一个按钮,输入框可供用户填写本地的文件名和路径名,按钮可以让浏览器打开一个文件选择框供用户选择文件。具体的表单实现如下: 选择了文件后直接输入本地文件的绝对路径,表单的action属性值是*.jsp,这意味着请求(包括上载的文件)将发送给*.jsp文件。在这个过程中实际上就实现了HTTP方式的文件上载。文件从客户端到服务器的上传是由HTTP协议的通用网关界面(CGI)支持的。这种上载方式要求浏览器和WEB服务器两方面都能够支持Rfc1867。JavaBean 通过ServletRequest类的getInputStream()方法获得一个客户端向服务器发出的数据流、分析上传的文件格式,根据分析结果将多个文件依次输出服务器端的目标文件中。 2.采用FTP协议实现多个文件的上传 FTP协议是Internet上用来传送文件的协议,规定了Internet上文件互相传送的标准。在Java中实现这一功能是借助FtpClient类完成的。具体实现过程:首先与FTP服务器建立连接。然后初始化文件的传输方式,包括ASCII和BINARY两种方

JAVA中的文件上传

SmartUpload上传图片 目标:在Jsp页面中实现文件上传 初级篇 文件上传是我们程序中会经常使用到的功能,针对于上传的技术也非常多!那么在此介绍两种常用简单的上传方式 上传方式一:使用SmartUpload组建进行上传 上传方式二:使用Struts的标签进行上传 我们新建一个Java Web工程,这里使用纯粹的jsp进行上传和显示功能的实现。 我们需要在我们的工程中添加smartUpload.jar包 之后我们编写index.jsp Index.jsp View Index.jsp Source 需要注意的设置表单的enctype="multipart/form-data"这个值我们可以再Dreamweaver中选我们将表单提交到另一个处理上传请求的doUploadjsp页面 我们现在编写处理文件上传的页面doUpload.jsp

下面是doUpload.jsp页面中的源代码 <%@page language="java"import="java.util.*"pageEncoding="GBK"%> <%@page import="com.jspsmart.upload.File"%> <%@page import="com.jspsmart.upload.Files"%> <%@page import="com.jspsmart.upload.SmartUpload"%> <% //实例化上传组件 SmartUpload upload=new SmartUpload(); //初始化上传组件 upload.initialize(this.getServletConfig(),request,response); //开始上传 upload.upload(); //获取上传的文件列表对象 Files f=upload.getFiles(); //获取文件对象 File fil=f.getFile(0); //去的文件后缀 String ext=fil.getFileExt(); //判断文件类型是否是jpg格式 if(!(ext.equals("jpg"))){ out .println(""); return; } //满足条件进行文件的上传需要注意的是upload使我们webRoot文件夹下的一个目录 fil.saveAs("upload/"+fil.getFileName()); %> 至此我们就完成了一个最简单的图片上传示例。我们部署测试下! 文件上传页面 我们选择一个视频文件

相关文档
最新文档