`

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.io.File`、`java.io.FileInputStream`、`java.io.FileOutputStream`等来处理文件的创建、读取和写入。一旦Servlet获取到上传的文件流,它会创建一个...

    java 源码(文件上传下载)

    4. **文件大小限制和安全检查**:为了防止DoS攻击,需要设定上传文件的大小限制,并进行文件类型检查,只允许特定类型的文件上传。 二、文件下载 1. **HTTP响应和流处理**:当用户请求下载文件时,服务器需要构造...

    java上传文件接口调用源码案例

    在Java编程中,文件上传是常见的任务之一,特别是...通过这个"java上传文件接口调用源码案例",我们可以学习到如何在Java环境中实现文件上传功能,这在开发Web应用、移动应用或者后端服务时都是一项基础且重要的技能。

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

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

    java文件上传源码资源

    4. **临时文件存储**:在处理上传文件时,通常先将文件保存到服务器的临时目录,以确保在处理过程中文件不会丢失。使用`java.io.File.createTempFile()`方法可以在指定目录下创建临时文件。 5. **文件验证与处理**...

    Java 上传文件到 SharePoint

    本篇文章将深入探讨如何使用Java来上传文件到SharePoint。 首先,我们需要了解Java中用于文件操作的基本类,如`java.io.File`,它提供了创建、读取、写入和删除文件的方法。此外,为了与SharePoint交互,我们需要...

    java源码包2

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

    java源码 java获取音频文件 播放时长AudioDemo 2018127

    首先,我们要关注的是`java.io`和`javax.sound.sampled`这两个Java核心包,它们提供了处理音频文件的基本功能。`javax.sound.sampled`包是Java Sound API的核心,用于音频输入、输出、格式转换以及混音等操作。 在`...

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

    Apache Commons IO中的`DiskFileItem`是用于处理文件上传的一个关键类,特别是在处理multipart/form-data格式的数据时,这是HTTP上传文件的常见方式。`DiskFileItem`设计用来存储临时文件到磁盘上,当内存不足以容纳...

    java源码:大文件上传的Java Applet mupload.rar

    3. **大文件处理**:由于大文件不能一次性加载到内存中,因此源码可能会使用流式处理技术,如`java.io.FileInputStream`和`java.io.BufferedInputStream`,分块读取和上传文件。此外,可能还涉及到断点续传的逻辑,...

    使用io实现文件上传

    3. **创建输出流**:根据客户端上传文件的路径,服务器创建一个`FileOutputStream`实例,用于将接收到的文件数据写入到本地文件。 4. **读取输入流**:从HTTP请求的输入流中读取数据,可以使用`BufferedInputStream...

    java源码包3

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

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

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

    带进度条的java上传下载源码

    例如,`java.io.FileInputStream`和`java.io.FileOutputStream`用于读写本地文件,而`java.io.InputStream`和`java.io.OutputStream`则常用于网络数据传输。 - **多部分表单数据解析**:对于文件上传,Java需要解析...

    Java传输文件(附有源码)

    1. **文件I/O操作**:在Java中,处理文件输入输出主要依赖于java.io包中的类,如FileInputStream和FileOutputStream。这些类提供了读写文件的基本方法,例如read()用于读取文件内容,write()用于写入数据。此外,...

    Java sftp上传文件夹demo

    JSch(Java Secure Channel)是一个开放源码的Java库,它实现了SSH2协议,包括SFTP功能。在本示例中,我们将深入探讨如何使用JSch库来实现通过SFTP上传整个文件夹的功能。 首先,我们需要在项目中添加JSch库。如果...

    局域网聊天和文件传输[Java源码]

    综上所述,这个“局域网聊天和文件传输[Java源码]”项目涵盖了Java桌面应用开发的多个关键方面,包括UI设计、网络通信、多线程处理和文件操作,为学习和理解这些核心技术提供了实践平台。通过深入研究这个项目,...

    java源码包4

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

    java上传图片到服务器源码下载

    本资源提供了两个开源库的源码:`commons-io`和`commons-fileupload`,它们是Java进行文件上传操作的重要工具。接下来,我们将详细讨论这两个库以及如何使用它们来实现图片上传功能。 `commons-io`是Apache Commons...

    jsp .java中输入输出流 java IO 下载 流的应用先01 > 02 > 01

    2. **JSP中的IO流**:在JSP中,IO流主要用于处理客户端和服务器之间的数据传输,例如文件上传和下载。JSP可以通过内置的对象如`response.getOutputStream()`获取输出流,向客户端发送数据,如文件内容。 3. **输入...

Global site tag (gtag.js) - Google Analytics