java中Commons-fileupload实现上传-程序员宅基地

技术标签: 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

智能推荐

编程人员的不二之选 LEGION Y9000X正式发布_y9000x写代码够用吗-程序员宅基地

文章浏览阅读4.6k次。10月11日,联想集团在全球总部未来中心举行了主题为“解密X空间”的新品发布会,正式发布了LEGIONY9000X笔记本电脑,并公布了“联想个人云存储核心测试用户招募”计划。高性能标压轻薄本 LEGION Y9000X赋能内容创造者“你正在用的笔记本是游戏本还是轻薄本?”通过这样的一个问题,联想中国区消费业务笔记本产品规划总监林林,拉开了“解密X空间”的序幕,带来重磅新品——高性能标..._y9000x写代码够用吗

强化学习(reinforcement learning)教程_强化学习教程-程序员宅基地

文章浏览阅读3.4w次,点赞2次,收藏29次。前一阵研究强化学习,发现中文的资料非常少,实例就更少。于是翻译一篇q学习算法的教程,供需要的人学习。原文链接:http://mnemstudio.org/path-finding-q-learning-tutorial.htm正文:Q学习算法是一种用来解决马尔可夫决策过程中最优化问题的方法。Q学习算法最大的特点是它具有选择瞬时奖励和延迟奖励的能力。在每一步中,agent通过观察状态_强化学习教程

SpringBoot+Vue校园二手书交易平台(源码+论文)_基于vue+springboot的校园二手商品交易网站论文-程序员宅基地

文章浏览阅读81次。后端:Java+SpringBoot前端:Vue数据库:MySQL开发软件:Eclipse、MyEclipse、IDEA都可以运行。_基于vue+springboot的校园二手商品交易网站论文

Chrome 开发者工具各种骚技巧-程序员宅基地

文章浏览阅读231次。对于每个前端从业者来说,除了F5键之外,用的最多的另外一个键就是F12了。今天,大神(@小鱼二)推荐我一个网站,才知道chrome还有各种骚姿势。网站是:umaar.com/dev-tip...

【jeecg-boot】jeecg-boot的一些功能扩展:-程序员宅基地

文章浏览阅读2k次。【jeecg-boot】jeecg-boot的一些功能扩展:_jeecg-boot

gitlab上克隆远程分支到本地(报错-error: RPC failed; curl 18 transfer closed with outstanding read data remaining)_gitlab 18: transfer closed with outstanding read d-程序员宅基地

文章浏览阅读2.7k次。首先确保你的电脑有安装git环境,本人使用的是windows下的git环境。双击桌面图标 的Git Bash 打开窗口修改配置git config --global user.namegit config --global user.email如:git config --global user.name "muzidigbig"git config --glo..._gitlab 18: transfer closed with outstanding read data remaining

随便推点

可能是最好用的Android引导层库-程序员宅基地

文章浏览阅读586次,点赞19次,收藏25次。着重说明一下setLayoutRes方法,通常其他的类似的库都是通过代码参数来控制说明内容展示在高亮view相对的位置,如下方。经常需要多次运行才能找到满意的位置的参数。大多说明内容只能出现在高亮的上下左右,需要库的支持,自定义的程度不是很高。我所采用的方式是将说明内容通过xml的方式,自定义摆放位置。使得说明内容高度自定义,不管你是简单的图片,还是对话框类型的都可以。.setEverywhereCancelable(false)//是否点击任意位置消失引导页,默认true。

小帅的七个男友 第一章 未恋先失-程序员宅基地

文章浏览阅读164次。第一章 未恋先失&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;初中时代的我,还是一个单纯的女孩,对于爱情,以为是眼泪制造出来的。我的圈子并不大,只有几个要好的女生,彭老二,周薇,秋毛。彭老二是个大嘴,校园里发生了什么事情她总是最先知道,通过她的大嘴,什么八卦新闻都逃..._操小帅

MATLAB db4小波分解与重构,语音降噪-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏23次。小波变换3级分解Mallat图:将带噪语音作为输入信号进行逐级DWT小波分解,并将分解出的低频成分cA3cA_3cA3​与强制置0后的高频成分cD3cD_3cD3​,cD2cD_2cD2​,cD1cD_1cD1​进行小波重构。Demo:clc,clear[x,Fs]= audioread('MUsic_Test.wav');snr = 20; %设定信噪比,单位dbnoise = randn(size(x)); % 用randn函数产生高斯白噪声Nx = length(x_db4小波

安装和配置SNMP(windows10和Linux)--附SNMP客户端工具_snmp工具-程序员宅基地

文章浏览阅读8.3k次,点赞5次,收藏34次。首先需要安装 snmp ,使用下面的命令进行安装安装完毕之后,使用下面的命令查看是否安装成功当命令行显示如图即为安装成功。_snmp工具

如何正确的敲键盘(打字习惯改正)_怎么敲键盘-程序员宅基地

文章浏览阅读6.4k次,点赞5次,收藏40次。练习打字的官网:http://dazi.kukuw.com/关于打字的详细介绍:一个过来人的打字指法纠正之路_怎么敲键盘

网络安全解决方案-程序员宅基地

文章浏览阅读9.6k次,点赞3次,收藏68次。一,网络安全体系结构网络安全体系结构是对网络信息安全基本问题的应对措施的集合,通常由保护,检测,响应和恢复等手段构成。1,网络信息安全的基本问题研究信息安全的困难在于:边界模糊数据安全与平台安全相交叉;存储安全与传输安全相制约;网络安全,应用安全与系统安全共存;集中的安全模式与分权制约安全模式相互竞争等。评估困难安全结构非常复杂,网络层,系统层,应用层的安全设备,安全协议和安全程序构成一个有机的整体,加上安全机制与人的互动性,网络的动态运行带来的易变性,使得评价网络安全性成为极_网络安全解决方案

推荐文章

热门文章

相关标签