通过JSP+servlet实现文件上传功能

在TCP/IP中,最早出现的文件上传机制是FTP.它将文件由客户端到服务器的标准机制。

但是在JSP中不能使用FTP来上传文件,这是有JSP的运行机制所决定的。

通过为表单元素设置Method="post" enctype="multipart/form-data" 属性,让表单提交的数据以二进制编码的方式提交,在接受此请求的servlet中的二进制流来获取内容,就可以取得上传文件的内容,从而实现文件的上传。

代码分两部分

part1:前台页面index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
  <head>
  </head>

  <body>
    <form action="UploadFile" method="post" enctype="multipart/form-data">
    <table>
    <tr>
    <td align="center">
               请选择上传的文件:<input type="file" name="fileName"/>               &nbsp;&nbsp;<input type="submit" value="上传"/>${result}    </td>
    </tr>
     </table>
    </form>
  </body>
</html>

part2:servlet代码

package com.file;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UploadFile extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        doPost(request,response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

        //写入缓存文件
        InputStream fileSource=request.getInputStream();
        String tempFileName="E:/tempFile";
        File tempFile=new File(tempFileName);
        FileOutputStream outputStram=new FileOutputStream(tempFile);
        byte[] b=new byte[1024];
        int n;
        while((n=fileSource.read(b))!=-1){
            outputStram.write(b,0,n);
        }
        outputStram.close();
        fileSource.close();
        System.out.println("成功");

        //获取文件名
        RandomAccessFile randomFile=new RandomAccessFile(tempFile,"r");
        randomFile.readLine();
        String str=randomFile.readLine();
        int beginIndex=str.lastIndexOf("\\")+1;
        int endIndex=str.lastIndexOf("\"");
        String filename=str.substring(beginIndex, endIndex);
        System.out.println("filename:"+filename);
        //获取上传文件内容的开始位置
        randomFile.seek(0);
        long startPosition=0;
        int i=1;
        while((n=randomFile.readByte())!=-1&&i<=4){
            if(n==‘\n‘){
                startPosition=randomFile.getFilePointer();
                i++;
            }
        }
        startPosition=startPosition-1;

        //获取上传文件内容的结束位置              randomFile.seek(randomFile.length());
        long endPosition=randomFile.getFilePointer();
        int j=1;
        while(endPosition>=0&&j<=2){
            endPosition--;
            randomFile.seek(endPosition);
            if(randomFile.readByte()==‘\n‘){
                j++;
               }
        }
        endPosition=endPosition-1;

        //上传文件
                 String path=getServletContext().getRealPath("/")+"MyImages"; //指定上传文件的目录        File fileupload=new File(path);
        if(!fileupload.exists()){
             fileupload.mkdir();
        }
        File saveFile=new File(path,filename);
        RandomAccessFile RAF=new RandomAccessFile(saveFile,"rw");
        randomFile.seek(startPosition);
        while(startPosition<endPosition){
            RAF.write(randomFile.readByte());
            startPosition=randomFile.getFilePointer();
        }
        RAF.close();
        randomFile.close();
        tempFile.delete();

        request.setAttribute("result","上传成功!");
        RequestDispatcher dispatcher=request.getRequestDispatcher("index.jsp");
        dispatcher.forward(request,response);
    }
}
时间: 2024-10-28 04:25:13

通过JSP+servlet实现文件上传功能的相关文章

jsp+servlet实现文件上传

上传(上传不能使用BaseServlet) 1. 上传对表单限制 * method="post" * enctype="multipart/form-data" * 表单中需要添加文件表单项:<input type="file" name="xxx" /> <form action="xxx" method="post" enctype="multipart/

Java jsp servlet 实现文件上传 最简单操作

|--实现文件上传的方式 1.进入http://commons.apache.org/proper/commons-fileupload/using.html 2.点击用户指南 3.对着用户指南一步步复制粘贴,并把代码撸成自己想要的样子 补充:记得要将commons-io-2.4.jar和commons-fileupload-1.2.2.jar这两个包放到编译器里面 |--现成的代码 1 <%-- 2 Created by IntelliJ IDEA. 3 User: Administrator

使用Commons FileUpLoad组件实现文件上传功能

Commons 是Apache开放的源码组织的一个java子项目,该项目主要涉及一些开发中常用的模块,如文件上传,命令行处理,数据库连接池等.FileUpLoad就是其中的一个用于处理HTTP文件上传的子项目.Commons FileUpLoad组建具有以下几个特点: 1.使用简单:Commons FileUpLoad组件可以方便的嵌入JSP文件中,在JSP文件中仅编写少量代码就可完成文件上传功能,十分方便. 2.能够全程控制上传的内容:使用Commons FileUpLoad组件提供的对象及操

Servlet多文件上传

各位大侠可能会对263电子邮箱中的"上传附件"功能有印象,就是:在浏览 器中点击"浏览",弹出一个对话框,选中文件后,单击"确定",文件就被上传到了服务器端. 因为需要,就到网上找了几个控件,如SmartUpload等,但都觉得不好用,或者 说是不合用,决定自己做一个.近日看到网上也有人提问怎么上载文件,于是把编制过程整理一遍,希望对大家有所帮助,不足之处,请多多指教. 准备 侦听工具,如SpyNet(包括CaptureNetPeepNet),目

使用cos.jar包实现文件上传功能

我们经常做项目时要用到文件上传功能,同时还要控制文件大小与文件类型,文件的重命名等功能:今天跟大家讲解一下使用cos.jar包来实现文件上传与控制的功能吧. 第一步:要把cos.jar文件拷贝到WEB-INF/lib文件夹 第二步:创建上传的jsp文件,upload.jsp,页面的表单必须有如下2个属性,并且值是固定的 1.enctype="multipart/form-data"2.method = "post" 页面完整代码如下: <%@ page lan

Spring MVC使用commons fileupload实现文件上传功能

通过Maven建立Spring MVC项目,引入了Spring相关jar依赖. 1.为了使用commons fileupload组件,需要在pom.xml中添加依赖: <properties> <spring.version>3.0.7.RELEASE </spring.version> <junit.version>3.8.1</junit.version> <fileupload.version>1.2.2</fileupl

Servlet实现文件上传,可多文件上传

一.Servlet实现文件上传,需要添加第三方提供的jar包 下载地址: 1) commons-fileupload-1.2.2-bin.zip      :   点击打开链接 2) commons-io-2.3-bin.zip                       :    点击打开链接 接着把这两个jar包放到 lib文件夹下: 二: 文件上传的表单提交方式必须是POST方式, 编码类型:enctype="multipart/form-data",默认是 applicatio

Android 实现文件上传功能(upload)

文件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的.下面是一个模拟网站程序上传文件的例子.这里只写出了Android部分的代码,服务器的代码没有贴出来,有需要完整上传功能代码的朋友可以跟我联系哟- 首先新建一个Android工程,新建主启动Activity: MainActivity.java: package com.xzq.upload; import java.io.DataOutputStream; import 

SpringMVC高速实现文件上传功能

SpringMVC为我们封装了上传文件的功能,如今就试用一下 须要的jar包 我用的是Maven项目,就不须要到处下载Jar包了 SpringMVC的搭建 首先要在applicationContext配置文件中注冊一下文件上传的服务 如 <!-- 文件上传配置--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartRes