Java web 中实现简单的文件上传与下载——学习笔记

文件上传

主要步骤

 1.首先在上传jsp页面表单头里写上enctype="multipart/form-data"
 2.然后在处理的servlet里创建一个DiskFileItemFactory工厂
 3.创建一个文件上传解析器
 4.解析请求对象。parseRequest()方法,得到上传数据的集合
 5.遍历集合,判断上传的是否是文件
 6.上传文件的文件名处理
 7.write()方法写入服务器目录

上传页面的jsp代码

  <body>
    <form action="${pageContext.request.contextPath}/UploadServlet" enctype="multipart/form-data" method="post">
        上传用户:<input type="text" name="username"><br/>
        上传文件1:<input type="file" name="file1"><br/>
        上传文件2:<input type="file" name="file2"><br/>
        <input type="submit" value="提交">
    </form>
    <a href="InitDownloadServlet">下载</a>
  </body>

处理上传的servlet代码

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // 1.得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
        String savePath = this.getServletContext()
                .getRealPath("WEB-INF/upload");
        File file = new File(savePath);
        // 判断上传文件的保存目录是否存在
        if (!file.exists()) {
            System.out.println(savePath + "目录不存在,需要创建");
            file.mkdir();
        }

        // 2、创建一个DiskFileItemFactory工厂
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(1024 * 1024 * 3000); // 设置仓库的大小
        // 3、创建一个文件上传解析器
        ServletFileUpload upload = new ServletFileUpload(factory);
        // 这里是写了一个进程监控。
        upload.setProgressListener(new ProgressListener() {

            @Override
            public void update(long arg0, long arg1, int arg2) {
                System.out.println("文件大小为:" + arg1 + ",当前已处理:" + arg0);
            }
        });
        // 解决上传文件名的中文乱码
        upload.setHeaderEncoding("utf-8");
        // 判断提交上来的数据是否是上传表单的数据
        if (!ServletFileUpload.isMultipartContent(request)) {
            // 按照传统方式获取数据
            return;
        }
        // 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,
        // 每一个FileItem对应一个Form表单的输入项
        List<FileItem> list = null;
        try {
            list = upload.parseRequest(request);
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
        if (list != null && list.size() > 0) {
            // 5.遍历上传所有的表单数据
            for (FileItem item : list) {
                // 如果fileitem中封装的是普通输入项的数据
                if (item.isFormField()) {
                    String name = item.getFieldName();
                    System.out.println(name);
                } else {
                    // 如果fileitem中封装的是上传文件
                    // 得到上传的文件名称
                    String filename = item.getName();
                    if (filename == null || "".equals(filename.trim())) {
                        continue;
                    }
                    // 6.由于浏览器的不同,获取的文件名的前缀可能不一致,所以需要处理
                    filename = filename
                            .substring(filename.lastIndexOf("\\") + 1);
                    //获取文件名称不包含后缀
                    String name = filename.substring(0,
                            filename.lastIndexOf("."));
                    // 截取文件扩展名
                    String extension = filename.substring(filename
                            .lastIndexOf("."));
                    // 重新构建文件名称 每次上传会在名字后面加上时间,解决了重复上传覆盖。
                    filename = name + new Date().getTime() + extension;
                    File savaFile = new File(file, filename);
                    try {
                        // 7.写入
                        item.write(savaFile);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    item.delete();
                    System.out.println(filename + " 文件上传成功");
                }
            }
        }
    }

文件的下载

文件下载比较简单,主要步骤如下:

 1. 设置文件ContentType类型
 2. 设置文件头
 3. 得到要下载的文件,并放入输入流中
 4. 通过响应对象获得输出流
 5. 边读取边写入

初始化获得服务器端文件的servlet代码

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // 获取服务器端下载的文件的路径
        String savePath = this.getServletContext()
                .getRealPath("WEB-INF/upload");
        // 通过服务器路径创建目录对象
        File downloadDir = new File(savePath);
        // 获取目录下面所有文件
        File[] files = downloadDir.listFiles();

        // 把文件数组对象保存到request对象中
        request.setAttribute("files", files);

        request.getRequestDispatcher("download.jsp").forward(request, response);
    }

处理下载的servlet代码

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        String fileName = request.getParameter("fileName");
        fileName = new String(fileName.getBytes("iso-8859-1"), "UTF-8");

        String savePath = this.getServletContext().getRealPath(
                "/WEB-INF/upload");
        // 1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
        response.setContentType("multipart/form-data");

        // 2.设置文件头:最后一个参数是设置下载文件名
        response.setHeader("Content-Disposition", "attachment;filename="
                + URLEncoder.encode(fileName, "UTF-8"));

        File saveFile = new File(savePath, "/" + fileName);
        InputStream in = new FileInputStream(saveFile);
        OutputStream out = response.getOutputStream();
        byte[] bytes = new byte[512];
        int len = 0;
        while ((len = in.read(bytes)) != -1) {
            out.write(bytes, 0, len);
        }

        in.close();
        out.close();
    }
注:上面没有设置下载后文件的存放目录,默认的浏览器的下载目录,大部分浏览器都可以自行选择下载目录。当然自己也可以自己重写一个输出流,把文件写进去。
    学习笔记,如有不足之处,还望指正。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle9i备课笔记——吕海东 第1讲 Oracle9i简介 目的: 1. 了解数据库的发展,关系数据库的基本原理。 2. 了解目前市场上流行的数据库产品及特点 3. 了解Oracle数据库的发展 4. 掌握Oracle9i产品系列 5. 掌握Oracle9i Database Server的新特点及其在实际的应用 6. 安装Oracle9i Database Server, Client及客户端常用工具TOAD7.5.2 授课内容: 1.1 作为软件开发人员,在当今就业市场上最应该掌握的技能: (1) 数据库技术:SQL Server, Oracle, DB2, Access, SQL, T-SQL, PL/SQL (2) 软件开发架构:J2SE, J2ME, J2EE, MS.NET (3) 开发语言: Java, C#.NET, J#.NET, VB.NET (4) Ineternet技术:HTML, XML, Web Service. JSP, ASP.NET, JSF (5) 软件工程:OOA, OOD, UML, RUP. (6) IDE开发工具:VS.NET 2003, JBuilderX, DreamwaverMX, Java Studio, IBM WebSpere Studio。 (7) 系统平台:Windows Server, Linux, Unix (8) 应用平台:IIS, Tomcat, Weblogic, WebShpere, Oracle AS. (9) 自然语言:英语,日语 1.2 学习Oracle数据库的重要性 (1) 数据库在当今世界的重要性。 (2) Oracle数据库的市场应用的广泛性。 (3) Oracle数据库的跨平台性,与Java语言对比说明。 (4) Oracle对大量数据管理的性能。数据的存储,修改,查询的性能是应用系统必须要考虑的首要因素。 1.3 Oracle数据库的特点: (1) 可移植性: (2) 跨硬件,软件平台 (3) 高性能,大容量 (4) 数据库的并发性:Oracle并发模型是独一无二的,优于IBM和Microsoft公司。大的ERP厂家都使用Oracle数据库的原因之一。 1.4 Oracle9i产品的构成 - Oracle9i已经不是一个简单的数据库服务器产品,而是一个完整的应用系统运行,开发平台。 - Oracle9i的产品系列包括: (1) Oracle9i Database Server (9iDS) (2) Oracle9i Application Server(9iAS): 支持J2EE架构的应用服务器。 (3) Oracle9i JDeveloper: IDE的java和Oracle应用开发工具。 (4) Form developer (5) Report Developer (6) Oracle9iDS的产品版本 (1) Enterprise Edition(企业版):带有数据仓库,OLTP的高级技术组件。高效的处理大数据量的技术支持。 (2) Standard Edition (标准版):适用于部门级的数据库规模。 (3) Personal Edition (个人版):单用户的开发测试系统。 1.5 Oracle9i数据库管理系统应用模式: (1) 客户/服务器模式: - Oracle9i数据库管理系统采用client/Server工作模式 - 数据库的核心运行在Server端:数据库的数据,管理系统,访问控制,安全控制,接受客户的请求,向客户发送响应信息都在服务器端完成。Server端要安装Oracle Server产品。 - 用户通过Oracle的客户端工具连接服务器端,向Server发送SQL命令,接收Server的发送结果,显示在client端的用户界面上。客户端要安装Oracle客户端软件。同时安装后要对客户端进行配置,以连接到某个数据库。 (2) 多层运行模式:针对Internet 1.6 Oracle服务器的标识 从Oracle8i开始,为了在Internet发布Oracle数据库,Oracle的标识采用了全局服务名的概念。 (1) 全局服务名:为了区分整个网络范围内的数据库,全局服务名的格式一般是:servername.companyname.com, 类似与Internet的域名规范。 (2) SID: System Identifier 系统标识的缩写,用于区分同一台服务器上不同的数据库例程。 1.7 Oracle9i数据库管理系统的安装 - Oracle9i DS的安装文件在3张CD上。 - 9i DS的要求环境: CPU: Pentium 166 above RAM: 最低128, 一般256, 最好512M。 HD: 空闲空间要求4G. OS: Server端要求windows 2000 server (SP3以上), 2003 Server. Client端: windows98, 2000 professional, windows ME, windows XP, 2000 Server. - 9iDS Server端安装: (1) DISK1 ->开始安装 (2) 选择安装路径 (3) 选择安装产品: (4) 选择版本: (5) 选择数据库配置: (6) 设定数据库标识: (7) 确定数据库文件的位置: (8) 确定数据库字符集 (9) 安装后自动进行的任务: <1> 网络配置助手完成网络的配置 <2> Oracle HTTP服务启动 <3> Oracle数据库配置助手完成数据库的创建和启动 <4> Oracle智能代理启动 (10) 显示服务器创建完成信息: (11) 进行数据库管理员的密码重新设定: - 9i DS client端安装: (1) DISK1在客户机上 (2) 选择产品:Oracle9i client (3) 选择客户端安装类型类型: <1>管理员类型:安装管理控制台,管理工具,网络服务,使用程序,和基本的客户端软件。 <2>运行时类型:只安装应用开发程序,网络服务,基本客户软件 <3>自定义:自己决定的组件安装。 (4) Oracle Net Configuration Assistant: (5) 配置client网络服务:使用Net Manager进行客户端的配置。 - Server上安装后的产品: - Client机器上的安装产品: - Server计算机上的服务:
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您从零基础开始,逐步掌握SSM的核心技术和最佳实践,助您在Java Web开发领域更上一层楼。 二、资料亮点 基础教程与练习项目:从基础知识讲起,结合实际练习项目,让您轻松上手SSM开发。 进阶技术与案例分析:针对进阶开发者,提供深入的技术探讨和案例分析,助您深入理解SSM的高级特性。 实战项目与经验分享:通过实际项目实战,让您在实践掌握SSM的运用,同时分享经验与心得,让您少走弯路。 三、适用人群与场景 无论您是初学者还是资深开发者,无论您是在校学生还是职场人士,本系列资料都将是您学习SSM的得力助手。适用于Java Web开发、企业级应用开发、个人项目实践等多个领域。 四、使用建议 系统学习:按照资料提供的顺序进行系统学习,确保知识体系的完整性。 实践为王:在学习过程注重实践操作,通过实际项目加深理解。 持续反馈与调整:根据学习进度和反馈,适时调整学习策略,提高学习效果。 五、安全与责任 在使用SSM框架进行开发时,请确保遵循最佳实践和安全准则,以保障系统的稳定性和安全性。在使用提供的资料时,请遵守版权法规,尊重原作者的权益。让我们共同为推动SSM技术的发展而努力!
java面试笔试题库java学习比较开发教程互联网公司面试资料大全合集: 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx 8张图解java.docx Addison.Wesley.Java.Concurrency.in.Practice.May.2006.chm Agile Java 测试驱动开发的编程技术.pdf Java 8 默认方法和多继承.docx Java NIO通信框架在电信领域的实践.docx java.png javaconcurrencyinpractice.pdf JavaEE学习笔记.pdf java_Java_学习笔记.pdf Java_Performance.pdf java代码效率优化.docx Java内存模型的历史变迁.docx Java在游戏服务器开发的应用.docx java基础总结大全.txt Java开发与技术挑战——关于技术的技术思考.docx Java框架研发思考.docx Java程序员们最常犯的10个错误.docx java程序员的就业指导(重点).docx Java程序员面试宝典 .pdf java笔试题大集合及答案 Java经典项目集锦.rar JAVA编程题全集(100题及答案).doc java面试书籍源码 Java面试笔试题库.CHM Java面试问题集.pdf Java面试题以及答案(小生).pdf java面试题(题库全).doc JS 数据库答案.doc Land.the.Tech.Job.You.Love-人人都有好工作—IT行业求职面试必读.pdf Linux命令大全完整版.doc sql查询语句练习.doc Web服务器的工作原理.docx 依赖注入与JSR-330的参考实现——Guice.docx 关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师测试题.doc 广州传智播客JavaEE工程师测试题(带答案的).doc 应聘时最漂亮的回答.docx 当面试官问「你有什么要问我的吗」时,应该问什么?.docx 提高 Java 代码性能的各种技巧.docx 搜狗商业平台Java技术实践.docx 最新JAVA编程题全集(50题及答案).doc 百度历年笔试面试150题.docx 笔试1.doc 答案1.doc 细品这杯香浓的咖啡——阿里间件高级专家沈询的Java之旅.docx 给你一次机会面试架构师 你会问什么问题?.docx 超全面:程序员跳槽神级攻略.docx 跳还是不跳,是一个问题——跳槽时该如何权衡?.docx 进入IT企业必读的324个JAVA面试题.pdf 阿里2015实习生-客户端笔试题目解析.docx 面试帮-IT面试宝典.apk 面试题 面试题库 高吞吐低延迟Java应用的垃圾回收优化.docx 黑马程序员入学Java精华总结.pdf
Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践深入掌握Java语言,并开启游戏开发之旅。资源包包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践持续学习新的技术和工具,不断提升自己。 Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践深入掌握Java语言,并开启游戏开发之旅。资源包包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践持续学习新的技术和工具,不断提升自己。 Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践深入掌握Java语言,并开启游戏开发之旅。资源包包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践持续学习新的技术和工具,不断提升自己。Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践深入掌握Java语言,并开启游戏开发之旅。资源包包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践持续学习新的技术和工具,不

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值