使用Fileupload组件上传文本和文件

本文详细介绍了如何使用FileUpload组件实现文件和文本的上传,包括效果演示、前端JSP页面、后台Servlet程序的配置,以及必要的依赖包。在上传过程中,会对用户是否选择文件进行验证,并提供了整体工程结构和所需jar包的下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用fileupload组件上传文本和文件

绪论

使用fileupload组件可以很方便的向服务器上传数据,包括表单数据以及二进制文件,比如pdf、图片视频等等。下面演示如何上传form表单数据以及二进制数据(以上传图片和word文件为例)

1、效果演示

因为本实验当中,做了一个小小的验证(如果前台页面没有选择文件就点击上传,是会提示错误信息到前台的),所以要用到JSP的标签,需要添加jstl.jar和standard.jar这两个包到buildPath当中。

前台界面

第一个userName就是上传的表单数据(这里就只有一个数据,实际中可以添加多个数据,在servlet中通过前台的ID获取即可)
第二个就是上传文件,如果文件选择为空,即未选择文件就点击上传,则不提交,显示如下

报错的界面,不提交数据

正确选择文件以后(以桌面上的一个名为“框图”的word文件为例)

点击上传以后,在文件夹下查看:

在指定目录下已经有文件了

然后表单数据的值233,我就直接打印在控制台了。

表单数据

2、代码

2.1 tomcat中web.xml的配置文件如下:

<servlet>
    <servlet-name>upload</servlet-name>
    <servlet-class>cn.zhoucy.web.Upload</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>upload</servlet-name> 
    <url-pattern>/upload</url-pattern>
  </servlet-mapping>

即是添加一个servlet即可。

2.2 前台jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

<script type="text/javascript">
    function checkForm(){
        var fileName=document.getElementById("file").value;
        if(fileName==null||fileName==""){
            document.getElementById("error").innerHTML="文件不能为空!";
            return false;
        }
        return true;
    }
</script>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body > 
      <form action="upload" method="POST" enctype="MULTIPART/FORM-DATA" onsubmit="return checkForm()"> 

        userName:<input type="text" id="userName" name="userName" size="30"/> <br/><br/>
        File:<input type="file" id="file" name="file" size="30"/> <br/><br/>

        <button class="btn btn-primary" type="submit" >上传</button>&nbsp;&nbsp;
        <button class="btn btn-primary" type="reset" >重置</button>
        &nbsp;
        <font id="error" color="red">${error }</font>
      </form> 
    </body> 
</html>

其中使用到了jstl.jar和standard.jar这两个包。

2.3 后台servlet程序

package cn.zhoucy.web;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

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

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class Upload extends HttpServlet{

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        userSave(request,response);
    }

    private void userSave(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

        FileItemFactory factory=new DiskFileItemFactory();
        ServletFileUpload upload=new ServletFileUpload(factory);
        upload.setHeaderEncoding("UTF-8");
        List<FileItem> items=null;
        try {
            items=upload.parseRequest(request); //获得前台提交过来的信息,两类:文件、form表单

        } catch (FileUploadException e) {
            e.printStackTrace();
        }
        Iterator<FileItem> itr=items.iterator();                

        while(itr.hasNext()){
            FileItem item=(FileItem)itr.next();
            if(item.isFormField()){
                //是表单数据
                System.out.println(item.getString("utf-8"));
            }else if(!"".equals(item.getName())){//不是form表单数据而是文件上传
                try{

                    //上传到硬盘的一个绝对路径
                    String filePath="E:\\Files\\"+item.getName();

                    item.write(new File(filePath));
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        } 
    }
}

2.4 整体工程结构及使用到的包下载

2.4.1 整体project结构

eclipse中project整体图

2.4.2 使用到的包

本实验一共使用如上图/lib目录下的4个包(附下载地址):
jstl.jar
http://download.youkuaiyun.com/detail/theblackbeard/9743427
standard.jar
http://download.youkuaiyun.com/detail/theblackbeard/9743857
commons-fileupload-1.2.1.jar http://download.youkuaiyun.com/detail/theblackbeard/9743428
commons-io-1.3.2.jar
http://download.youkuaiyun.com/detail/theblackbeard/9743861

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值