`

java源码 上传文件的IO流

    博客分类:
  • java
阅读更多
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.
分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

    摘要:Java源码,文件操作,数据压缩,文件传输  Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、...

    java源码包4

    摘要:Java源码,文件操作,数据压缩,文件传输  Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、...

    java源码包3

    摘要:Java源码,文件操作,数据压缩,文件传输  Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、...

    java源码包2

    摘要:Java源码,文件操作,数据压缩,文件传输  Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、...

    JAVA上百实例源码以及开源项目源代码

    摘要:Java源码,文件操作,数据压缩,文件传输  Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、...

    JAVA上百实例源码以及开源项目

    摘要:Java源码,文件操作,数据压缩,文件传输  Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...

    java apache common-io上传大文件报错

    NULL 博文链接:https://fengjianrong.iteye.com/blog/2381735

    Jsp文件上传下载(工具类源码)

    // 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘 dfif.setRepository(new File(request.getRealPath("/") + "ImagesUploadTemp"));// 设置存放临时文件的目录,web根目录下的...

    java nio与io性能测试

    NULL 博文链接:https://ilrxx.iteye.com/blog/1051402

    文件上传源码(jsp+servlet)

    实现简单的文件上传功能。 在工程中加入io和upload组件的方法: Windows-preferences-Java-buildpath-userlibraries 右击工程名:buildpath-config buildpath-libraries-addlibraries-userliraries-next,加入包即可...

    Java源码 SpringMVC Mybatis Shiro Bootstrap Rest Webservice

    3. IO 流上传下载文件,多线程操作 4. 发送邮件,配置邮件服务器,发基于html、纯文本格式的邮件(可以免费赠送网络爬虫,使其群发邮件,做到广告推送等) 5. MD5加密(登陆密码校验加密等),用户统一Session、...

    java开源包8

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    word源码java-SpringBoot_FileHandle_OpenOffice:SpringBoot文件上传下载,结合OpenOffi

    文件上传使用MultipartFile对象、下载使用传统IO流、jobconverter结合OpenOffice把office文件转为pdf文件、通过pdf.js实现在线预览pdf文件。(核心代码直接跳5.Service层) [TOC] 1. 导入依赖 <groupId>org.spring...

    Flowable-BPMN操作流程部署启动源码

    Flowable-BPMN操作流程部署启动源码,具体理解和操作参考我的专栏https://blog.csdn.net/houyj1986/column/info/31755,第10节

    JSP基于DES算法管理系统myeclipse开发mysql数据库web结构java编程jsp展现

    系统对上传的txt文件进行IO流读取,然后进行对应加密或者解密然后把处理后的字符串IO流的方式进行回写到txt方便用户下载 三、注意事项 1、管理员账号:admin密码:admin 数据库配置文件DBO.java 2、开发环境为...

    积分管理系统java源码-MiniHttpServer:用于Java(android)的迷你http服务器

    积分管理系统java源码 Mini Http Server for Java (Android) 一:开发环境 Mac OS 10、Java 1.8、IDEA(Gradle工程) 二:介绍 一款基于Java Nio实现的Http解析框架,支持常见的请求解析和逻辑;采用单线程解析多...

    课程实验基于Java实现的分布式存储系统源码+项目说明.tar

    课程实验基于Java实现的分布式存储系统源码+项目说明.tar 项目概述与技术点: * 参照**GFS**(Google File System)中心化思想自主完成系统架构设计,完成技术方案编写 * 基于文件元数据服务实现**自定义注册中心**,...

Global site tag (gtag.js) - Google Analytics