六、目录结构: (1) jsp文件和txt文件同一个目录
(2)
Java文件是servlet目录下
七、测试: http://[server:port]/dir/index.jsp
对文本文件的操作,其实以前的例子已经讲的很清楚了,之所以还要介绍该例,是想让读者了解JSP中文件操作的功能,可以结合其他技术,像该例中jpeg
图片的自动生成,来实现更为强大的功能。对你有所启发吗?
如何实现文件上传功能? 文件上传,相信很多读者都比较熟悉了,用E-Mail给同学、朋友寄张近照,以表问候,这时就得用到此项功能。那么文件是如何传到服务器上的呢?看了下面的例子,相信读者会找到答案。
基本原理:使用ServletRequest类的getInputStream()方法获得一个客户端向服务器端发出的数据流,然后处理这个数据流,从中分析、得到文件上载中传递到服务器的各个参数和数据,然后将其中的文件数据存储为一个文件,这样就实现了文件上载的功能。
由于代码太长,我们将它放在了配套光盘上,详细内容请见UploadServlet.Java。下面我们就来分析一下该代码。
// MAX_SIZE用来定义上传文件的最大长度。
static final int MAX_SIZE = 102400;
//rootPath用于存放根路径,successMessage用来存放成功信息
String rootPath, successMessage;
Init()方法用于初始化参数。最关键的部分是doPost()函数:
在获取数据流之前,首先确定数据流的内容类型是否为multipart/form-data: if(contentType != null && contentType.indexOf("multipart/form-data") != -1) { … } |
在内容类型确定为multipart/form-data后,接着就将数据流的内容读到临时缓冲区dataByte[]中:
in = new DataInputStream(request.getInputStream()); int formDataLength = request.getContentLength(); byte dataBytes[] = new byte[formDataLength]; while (totalBytesRead < formDataLength) { //check for maximum file size violation sizeCheck = totalBytesRead + in.available(); if (sizeCheck > MAX_SIZE) { out.println("Sorry, file is too large to upload."); return; } bytesRead = in.read(dataBytes, totalBytesRead, formDataLength); totalBytesRead += bytesRead; } |
下面的工作就是分析文件上载中传到服务器的各个参数和数据了。在该例中,
程序分析了Directory、SuccessPage、OverWrite以及OverWritePage参数,这些参数在服务器生成最终文件时使用。最后程序将数据流中的文件内容输出到文件流中,生成文件。
fileOut = new FileOutputStream(fileName);
fileOut.write(file.getBytes(),0,file.length());
