OYM的任务中,有个要求,上传一个Excel文件,检查他的内容是否合法,并返回信息。
今天想了一下,第一个要解决的问题就是上传一个Excel文件,上传文件的组件到挺多的,网上一搜,就有一大堆教程,但是现在并不是要上传一个文件到服务器以作存储之用,而是要上传一个文件到内存里,以Java的数据结构存储起来,并检查,把合乎要求的数据写到数据库里。所以在网上的一大堆上传文件的组件并不合用。于是又想自己写,思路就是从客户端那里获取一个InputStream,然后就对这个InputStream做一系列的检查。代码如下:
ServletInputStream sis = request.getInputStream();
InputStreamReader isr = new InputStreamReader(sis);
int ch;
while((ch = isr.read()) != -1 ) {
out.println((char)ch);
}
System.out.flush();
结果的出去就是如下(输出东西写到页面):
-----------------------------7d7ea23120550
Content-Disposition: form-data; name="file1";
filename="C:\Documents and Settings\Administrator\桌面\test.txt"
Content-Type: text/plain
my name is Rokey.Rokey。我的名字叫Rokey.
-----------------------------7d7ea23120550 Content-Disposition: form-data;
name="Submit" 上传 -----------------------------7d7ea23120550--
很明显,这里只有
my name is Rokey.Rokey。我的名字叫Rokey.
对我有用,这个也正是我的文件里面的内容,其它的都是关于这些form的其它信息。对我这个程序是没有用的。如果这里写下去的话,还要我去分析那些是数据,哪些是form的参数。好,到现在为止,我已经打消了自己写的念头了。我想,那些组件都可以把上传文件封装得那么好,能不能利用那些库,抽出文件的IO流,让我操作呢?
于是,就开始对O'Reilly的上传组件cos.jar的API看,看到里面有这么一段。
public class MultipartParser
extends java.lang.Object
A utility class to handle multipart/form-data requests, the kind of requests that support file uploads. This class uses a "pull" model where the reading of incoming files and parameters is controlled by the client code, which allows incoming files to be stored into any OutputStream. If you wish to use an API which resembles HttpServletRequest, use the "push" model MultipartRequest instead. It's an easy-to-use wrapper around this class.
This class can receive arbitrarily large files (up to an artificial limit you can set), and fairly efficiently too. It cannot handle nested data (multipart content within multipart content). It can now with the latest release handle internationalized content (such as non Latin-1 filenames).
It also optionally includes enhanced buffering and Content-Length limitation. Buffering is only required if your servlet container is poorly implemented (many are, including Tomcat 3.2), but it is generally recommended because it will make a slow servlet container a lot faster, and will only make a fast servlet container a little slower. Content-Length limiting is usually only required if you find that your servlet is hanging trying to read the input stram from the POST, and it is similarly recommended because it only has a minimal impact on performance.
而且里面的API已经封装程我想象得到的情况了。于是,我就觉得这样我就可以完成我的功能了。于是,就写了以下代码:
MultipartParser mp = new MultipartParser(request, 10 * 1024 * 1024);
Part part;
while ((part = mp.readNextPart()) != null) {
if (part.isParam()) {
// it's a parameter part
ParamPart paramPart = (ParamPart) part;
//out.println("param: name=" + name + "; value=" + value);
} else if (part.isFile()) {
FilePart filePart = (FilePart) part;
InputStream is = filePart.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
int ch;
while ((ch = isr.read()) != -1) {
out.print((char) ch);
}
System.out.flush();
isr.close();
is.close();
}
}
出去结果如下:
my name is Rokey.Rokey。
我的名字叫Rokey.
到现在,已经可以把这个流封装成一个文件流,送给Excel的组件去处理了。
分享到:
相关推荐
JEE2实现文件上传 JEE2 实现文件上传是指在 JEE2 环境中实现文件上传的过程。文件上传是指从客户端将文件发送到服务器端的过程。在 JEE2 中,我们可以使用 Servlet 和 JSP 来实现文件上传。 首先,我们需要了解 ...
在Java企业版(JEE)2中实现文件下载,通常涉及到服务器端的处理以及与客户端浏览器的交互。这里我们将详细探讨两种主要方法:通过HTTP响应流和使用Applet。 **方法一:通过HTTP响应流** 这种方法是服务器端将文件...
- 限制上传文件的类型和大小,防止恶意文件上传。 - 使用安全的文件名生成策略,避免路径遍历攻击。 9. **用户体验优化**: - 添加预览功能,让用户在上传前可以看到所选文件。 - 使用异步验证,如文件大小、...
【JEE入门(深入浅出学习JEE)】 Java企业版(Java Enterprise Edition,简称JEE),也称为Java EE,是Oracle公司推出的企业级应用程序开发平台。它为开发分布式、多层架构的Web应用程序提供了全面的框架和服务。JEE...
本项目旨在提供一个基础的文件上传和下载实现,允许用户通过浏览器上传文件,并能从服务器下载已上传的文件。尽管它的界面可能不够美观,但作为教学示例,主要关注的是核心功能的实现,可以作为学习和扩展的基础。 ...
jee5 api 手册,查看jee api的相关内容
1. **下载汉化包**:首先,用户需要从可靠的来源获取像"eclipse-jee-galileo(3.5)汉化包.zip"这样的汉化补丁文件。 2. **解压汉化包**:将下载的zip文件解压到本地文件夹,通常会包含一些.jar文件或者.p2f文件,...
开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32...
例如,它可以很好地与Windows的文件系统和网络服务集成,支持Windows下的快捷键,使得Windows开发者能够无缝切换到Eclipse的开发环境。 总的来说,Eclipse JEE Neon 3-win32-x86_64.zip这个压缩包,不仅包含了完整...
标题 "eclipse-jee-2018-09-win32-x86_64.zip" 提供的信息表明这是一款针对Java企业级开发的Eclipse集成开发环境(IDE)的2018年9月版本,适用于Windows 32位操作系统、x86_64架构的计算机。Eclipse是一个开源的、跨...
JEE6(Java Platform, Enterprise Edition 6)是Java EE的第六个版本,它在Java EE 5的基础上对Java的企业级应用开发进行了进一步的优化和增强。JEE6不仅包括了Java EE 5的大多数特性,还引入了更多的新功能和技术,...
JEE事务是Java企业版(Java Platform, Enterprise Edition)中管理事务的一套规范和服务。事务确保了数据的一致性和稳定性,是构建可靠服务器端应用的核心组件。JEE事务处理的六大知识点如下: 一、事务产生的动机 ...
JSP文件会被Web容器转换为Servlet并进行执行。 3. **JSF(JavaServer Faces)**:JSF是一种用于构建用户界面的MVC(Model-View-Controller)框架。它简化了创建和管理用户界面组件的过程,提供了数据绑定和事件处理...
标题 "eclipse-jee-2021-06-R-win32-x86_64.zip" 提供的信息表明,这是一个针对Windows操作系统x86_64架构的...用户可以通过解压这个文件来获取最新的Eclipse JEE环境,以便进行高效的Web应用和其他JEE项目开发。
为了深入了解这个项目,需要查看这些文件,特别是源代码,以学习具体的编程技巧和JEE的最佳实践。 总之,JEE用户管理代码项目展示了如何在企业级环境中构建一个完整的用户管理系统,涉及到的身份验证、授权、数据...
- 使用Request对象的Form集合来获取上传文件的临时文件名,通常在服务器的临时目录中。 3. 图片处理: - 图片文件通常是二进制数据,不能直接存入关系型数据库。首先,需要读取上传文件的二进制内容,可以使用...
标题 "jee-2018-12下附属插件.rar" 暗示这是一个针对Java Enterprise Edition (Java EE, 现在被称为Jakarta EE) 的2018年12月版本的插件集合。这个压缩包可能包含了一系列用于开发、调试或优化Java EE应用程序的工具...
标签“eclipse”和“eclipse-jee-2020”进一步强调了这个文件与Eclipse IDE及其2020年的Java EE版本有关。这些标签有助于用户搜索和识别与Eclipse相关的资源。 在压缩包子文件的文件名称列表中,我们看到: 1. `...
JEE入门是Java企业版(Java Platform, Enterprise Edition)的基础学习资料,主要用于帮助开发者了解和掌握JEE技术体系的核心概念与基本原理。JEE,作为Java技术的一个版本,专为开发和部署企业级应用而设计,提供了...
对于有经验的开发者,可以探索更高级的功能,如自定义工作流、构建自动化和团队协作工具。 总之,Eclipse JEE 2022-09 R是Windows平台上开发JEE应用程序的理想选择,其强大功能和易用性使开发者能够高效地构建、...