java中Commons-fileupload实现上传_weixin_30649859的博客-程序员宅基地

技术标签: java  

 

java中Commons-fileupload组件实现上传

 

 

在实现功能之前需要导入两个jar文件,分别是 commons-fileupload-1.3.1.jar commons-io.jar 文件,这里就不提供链接,网上搜索都有可以自行下载。

----------------------------------------------------jsp页面-----------------------------------------------------

第一步:先上传一个简单的jsp页面 ,在上jsp页面之前需要说的问题是:需要在jsp页面导入类库:<%@ page import="org.apache.commons.fileupload.*"%>

 

接下来来一个简单的form表单的jsp页面的代码,用于界面上传:

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="org.apache.commons.fileupload.*"%><!-- 导入类库 -->
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <base href="<%=basePath%>">

        <title>文件上传</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
    </head>

    <body>
        <h2>
            使用commons-fileupload上传文件
        </h2>
        <hr />
        <form action="CommonsFileuploadServlet02" method="post"
            enctype="multipart/form-data">

            <table>

                <tr>
                    <td>上传的用户</td>

                    <td><input type="text" name="uesr" size="20" /></td>
                </tr>

                <tr>
                    <td>请选择要上传的文件</td>
                    <td><input type="file" name="filepath" size="20" /></td>
                </tr>
                
                <tr>
                    <td><input type="submit" value="上传" />    </td>
                </tr>
            </table>
        </form>
    </body>
</html>

 

 

 

 

-----------------------------------------------CommonsFileuploadServlet.java逻辑处理文件------------------------------------------

 

 第二部份内容是form表单请求的Servlet文件:CommonsFileuploadServlet.java

 注意看doPost内部的方法:

package cn.jbit.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
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.DiskFileUpload;
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 CommonsFileuploadServlet 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 {

        request.setCharacterEncoding("UTF-8");// 输入防止中文乱码
        response.setContentType("text/html;charset=UTF-8");// 输出防止中文乱码

        PrintWriter out = response.getWriter();

        String show = "文件上传成功";
        
        // 上传的文件名
        String uploadfileName = "";
        // 表单元素的name属性值
        String filename = "";

        // 1.请求信息是否为multipart/form-data类型
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);

        // 2.设置上传文件的存储路径,注意这里获取的是tomcat服务下当前项目下的目录文件
        /*
         * String uploadFilePath = request.getSession().getServletContext()
         * .getRealPath("");
         */

        /**
         * 这里我们可以根据自己的需求自定义路径
         */
        String uploadFilePath = "D:/";

        // 判断如果是multipart/form-data类型
        if (isMultipart) {
            // 创建file工厂
            FileItemFactory factory = new DiskFileItemFactory();

            // ServletFileUpload对象的创建需要依赖FileItemFactory工厂
            ServletFileUpload upload = new ServletFileUpload(factory);

            /**
             * 当然,这里我们也可以这么写 ServletFileUpload upload = new
             * ServletFileUpload(new DiskFileItemFactory());
             * //简化了创建FileItemFactory工厂实例
             */

            // 设置转换时使用的字符编码集
            upload.setHeaderEncoding("UTF-8");
            /**
             * 在这里建议: request.setCharacterEncoding("UTF-8");// 输入防止中文乱码
             * response.setContentType("text/html;charset=UTF-8");//输出防止中文乱码
             * upload.setHeaderEncoding("UTF-8"); 这三句防止乱码的操作都加上!保险!!
             * 
             */
            try {
                // 这里创建FileItem集合对象,用户接收ServletFileUpload
                // 对象的parseRequest()方法所返回的值
                List<FileItem> fileList = upload.parseRequest(request);

                Iterator<FileItem> iterator = fileList.iterator();

                while (iterator.hasNext()) { // 依次处理每个文件

                    // 循环获取FileItem对象实例
                    FileItem item = iterator.next();

                    /*
                     * isFormField()方法的意思是根据表单内的字段类型返回不同的结果,如果得到的是普通字段的类型则返回true,
                     * 如果是文件字段则返回false
                     */
                    if (item.isFormField()) { // 这里获取的是提交的form表单内的普通字段、如text、password等

                        filename = item.getFieldName(); // 表单字段的name属性值
                                                        // ,注意是name属性的值,而不是对应value的值,这一点需要明白

                        System.out.println("---------------" + filename); // 打印

                    } else {
    // 否则获取文件字段

                        String filedname = item.getName(); // 获取上传文件的全路径字符串

                        System.out.println("--------------" + filedname); // 打印测试
                        
                        
                        // 判断是否不等于空
                        if (filedname != null && !filedname.equals("")) {
                            // 创建file对象,保存输入的文件路径(需要上传的文件是从哪个路径下传过来的)
                            File fullFile = new File(filedname);

                            System.out.println("-----------fullFile----------"
                                    + fullFile); // 打印测试,看看此时的fullFile是什么

                            // 这里通过File对象的getName()方法从路径中获取上传的文件名称,然后把文件名和新的路径(需要将上传文件传到哪里的路径)进行拼接,结合,从而形成一个新的路径
                            File savefile = new File(uploadFilePath, fullFile
                                    .getName());

                            System.out.println("-----------savefile----------"
                                    + savefile); // 打印测试将要讲文件传入哪里的全路径

                            // 通过FileItem对象的write()方法保存的主体内容到指定的文件路径中
                            item.write(savefile);

                            // 获取上传的文件名称
                            uploadfileName = savefile.getName();

                            // 向jsp页面输出上传成功的信息
                            out.print("<script>alert( " + "'" + uploadfileName
                                    + show + "'"
                                    + ");location.href='index.jsp';</script>");

                        } else {
                            // 向jsp页面输出上传失败的信息
                            out.print("<script>alert('文件上传失败');location.href='index.jsp';</script>");

                        }
                    }
                }

            } catch (FileUploadException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        } else {
            out
                    .print("<script>alert('系统内部错误');location.href='index.jsp';</script>");

        }
    }
}

 

 

转载于:https://www.cnblogs.com/kzhan/p/3790067.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30649859/article/details/94807349

智能推荐

Spring Cloud全面总结_spring cloud 每次都创建链接_无痕YF的博客-程序员宅基地

首先我给大家看一张图,如果大家对这张图有些地方不太理解的话,我希望你们看完我这篇文章会恍然大悟 什么是Spring cloud 构建分布式系统不需要复杂和容易出错。Spring Cloud 为最常见的分布式系统模式提供了一种简单且易于接受的编程模型,帮助开发人员构建有弹性的、可靠的、协调的应用程序。Spring Cloud 构建于 Spring Boot 之上,使得开发者很容易入手并快速应用于生产中。 官方果然官方,介绍都这么有板有眼的。 我所理解的 Spring Clo_spring cloud 每次都创建链接

[网络流24题] 洛谷P1251 餐巾计划问题 费用流-程序员宅基地

一个餐厅在n≤2e3n\leq2e3n≤2e3的天内,每天都需要一些餐巾,第iii天需要rir_iri​的餐巾的数量,每天餐厅都可以花ppp买一个新的餐巾。另外每天都可以把若干个餐巾送到快洗店或者慢洗店,快洗店是需要花fff块,洗mmm天。慢洗店需要花sss块,洗nnn天,也可以把餐巾保留到下一天。对建图能力要求比较高的费用流,好题。每一天都拆成两个点,分别代表白天和晚上,白天是处理干净的餐巾,...

Delphi Excel 操作大全-程序员宅基地

(一) 使用动态创建的方法首先创建 Excel 对象,使用ComObj:var ExcelApp: Variant;ExcelApp := CreateOleObject( 'Excel.Application' );1) 显示当前窗口:ExcelApp.Visible := True;2) 更改 Excel 标题栏:ExcelApp.Caption := '应用程序调用 Microso..._delphi 怎么判断excel列是隐藏列

tcp中RACK算法_tcp rack-程序员宅基地

RACK即recent ack,表示根据最新的(s)ack来做丢包判断,是google去年新提出的一个丢包检测算法,目前主要用于解决尾部丢包和二次重传的问题,但是它应该可以FACK,dupACK并驾齐驱,理解起来也比较直观。以下分析是基于linux-4.5内核版本基本思想如果数据包p1在p2之前发送,没有收到p1的确认,当收到p2的SACK后,推断p1丢了。算法每一个s_tcp rack

代码管理工具git学习笔记02--分支管理_代码管理器 分支类型-程序员宅基地

创建与合并分支初始时Git里只有一个master分支,HEAD严格来讲不是指向提交,而是指向master,master才是指向提交的。每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。当我们创建新分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:g..._代码管理器 分支类型

分布式NoSQL列存储数据库Hbase_MR集成Hbase:读写Hbase规则(九)_tablereducer mutation-程序员宅基地

文章目录分布式NoSQL列存储数据库Hbase(九)知识点01:课程回顾知识点02:课程目标知识点03:MR集成Hbase:读Hbase规则知识点04:MR集成Hbase:读Hbase实现知识点05:MR集成Hbase:写Hbase规则知识点06:MR集成Hbase:写Hbase实现知识点07:BulkLoad的介绍知识点08:BulkLoad的实现知识点09:ImportTSV的使用知识点10:协处理器的介绍知识点11:协处理器的实现知识点12:Hbase优化:内存分配知识点13:Hbase优化:压缩机制_tablereducer mutation

随便推点

office2016打开PPT出现解决VBE6EXT.OLB不能被加载问题的解决办法-程序员宅基地

第一步打开路径C:\Program Files (x86)\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\VBA。找到VBA只要是默认安装路径均一样。第二步打开VBA6找到VBE6EXT.OLB将其复制到VBA7.1中。第三步打开VBA7.1找到VBE7.DLL将其复制到VBA6中。第四步不需要...

Python爬虫 抓取大数据岗位招聘信息(51job为例)-程序员宅基地

简单介绍一下爬虫原理。并给出 51job网站完整的爬虫方案。爬虫基础知识数据来源网络爬虫的数据一般都来自服务器的响应结果,通常有html和json数据等,这两种数据也是网络爬虫的主要数据来源。其中html数据是网页的源代码,通过浏览器-查看源代码可以直接查看,例如:json是一种数据存储格式,往往包含了最原始的数据内容,一般不直接显示在网页中,这里可以通过Chrome浏览器&gt...

Linux下安装php环境并且配置Nginx支持php-fpm模块-程序员宅基地

以下以CentOS 7.2为例,安装php的运行环境,首先打开php官网http://php.net/点击导航栏的Downloads进入下载页面:http://php.net/downloads.php  这里下载最新版的php 7.0.5 的源码包:    下载下来之后上传至服务器  因为php安装需要编译,所以服务器应该保证gcc和g++环境的安装  首先释放安装包:...

记录学习的点点滴滴-程序员宅基地

刚申请了CSDN个人技术博客,来记录学习互联网技术遇到的点点滴滴,和志同道合的朋友一起分享,共同进步,一起成长~

html空格代码_h5中空格的代码-程序员宅基地

html中空格代码的写法一: &nbsp (不换行空格)html中空格代码的写法二:&ensp(半角空格)html中空格代码的写法三:&emsp(全角空格)html中空格代码的写法四:&thinsp(窄空格)html中空格代码的写法五:&zwnj(零宽不连字)说明:&zwnj是一个不打印字符,放在电子文本的两个字符之间,抑制本来会发生的连字,而是以这两个字符原本的字形来绘制。html中空格代码的写法六:&zwj(零宽连字)说明:&_h5中空格的代码

UVA 1335 Beijing Guards(二分答案)-程序员宅基地

入口: https://cn.vjudge.net/problem/UVA-1335 【题意】有n个人为成一个圈,其中第i个人想要r[i]种不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物。如果两个相邻的人拥有同一种礼物,则双方都会很不高兴,问最少需要多少种不同的礼物才能满足所有人的需求,假设每种礼物有无限多个  【分析】[蓝书例题] 如果n为偶数的话,ans = m...