commons-fileupload

public void save(HttpServletRequest request,HttpServletResponse response)     throws Exception { 

    String temp = getServletContext().getRealPath("/temp"); // 上传时存放临时文件的目录
String uploadDir = getServletContext().getRealPath("/upload"); // 上传文件存放的目录 DiskFileUpload diskFileUpload = new DiskFileUpload(); diskFileUpload.setSizeMax(1*1024*1024); // 设置允许用户上传文件大小,单位:字节
diskFileUpload.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:字节 diskFileUpload.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录 //开始读取上传信息 List fileItems = diskFileUpload.parseRequest(request); Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件 while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); // 忽略其他不是文件域的所有表单信息
if(!item.isFormField()) { String name = item.getName(); // 获取上传文件名,包括路径 name = name.substring(name.lastIndexOf("\\") + 1); // 从全路径中提取文件名 long size = item.getSize(); if (name != null && !name.equals("") && size != 0) {
String filePath = System.currentTimeMillis() + "_" + name; item.write(new File(uploadDir, filePath)); Upload upload = new Upload();
upload.setFileName(name);
upload.setFilePath("upload/" + filePath);
upload.setFileSize(size);
upload.setAddDate(new Date()); list.add(upload); } } }

处理文件上传的第一步是创建一个DiskFileUpload,为它设置临时目录,文件大小限制,内存缓存的大小。

得到DiskFileUpload实例后,调用parseRequest(request)解析请求,解析的结果是一个列表,因为我们可能上传多个文件。

现在可以循环得到的列表处理每一个FileItem,如果isFormField()返回false,表示当前FileItem对应一个上传的文件,下面就能从FileItem中获得文件名和文件大小,最后调用write()方法写入upload目录下。

文件上传时 浏览器端注意事项:

1.使用method="POST"。

表单默认使用method="GET"提交请求,GET方式的请求是没有请求体(body)的,所有参数都将附加到url后传递给服务器。

文件上传需要将二进制数据放到请求体(body)中,所以我们必须指定表单使用method="POST"。

2.为表单设置enctype="multipart/form-data"。

不设置enctype的情况表单只会把文件名传递到服务器,enctype的效果是把本地文件以二进制的形式附加到请求的body中,供服务器接收解析。

JSP入门 文件上传的更多相关文章

  1. JSP多文件上传到服务器

    问题描述: 作为一个Java开发Web方向的程序员,很重要的一个功能,就是上传文件功能是一定要掌握的,今天整理了一下代码. 1.JSP显示界面代码和动态添加上传文件个数. <%@ page la ...

  2. Android+jsp +html 文件上传案例 已测试 成功通过

    我文件上传一直是广大读者一个问题 今天就把成功案例写下 javaweb 网页前段 <%@ page language="java" import="java.uti ...

  3. 基于jsp的文件上传和下载

    参考: 一.JavaWeb学习总结(五十)--文件上传和下载 此文极好,不过有几点要注意: 1.直接按照作者的代码极有可能listfile.jsp文件中 <%@taglib prefix=&qu ...

  4. jsp简易文件上传(common.fileupload)

    昨天开始重新架构我的V&View(维视),之前写文章使用的是一个kindediter的插件,挺好用的.最近不知道咋了,出现了些小问题.早在写V&View的时候就想用以下两种方法实现文章 ...

  5. jsp Servlet 文件上传

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  6. jsp实现文件上传下载

    文件上传: upload.jsp <form action="uploadServlet" method="post" enctype="mul ...

  7. 使用jsp实现文件上传的功能

    首先是表单的jsp文件:upload.jsp <%@ page contentType="text/html;charset=UTF-8" language="ja ...

  8. jsp实现文件上传(二)用cos组件实现文件上传

    jsp表单 <%@ page language="java" pageEncoding="utf-8"%> <html> <hea ...

  9. JSP的文件上传

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/file-uploading.html: 一个JSP可以用一个HTML表单标签,它允许用户上传文件到服务器 ...

随机推荐

  1. Servlet的执行流程、生命周期

    下面这幅图的Request和Response的箭头方向反了,应该是客户端发出请求,然后web服务器返回响应. servlet生命周期阶段包括初始化.加载.实例化.服务和销毁.  编写Servlet的d ...

  2. css 找到隐藏元素个数

    <form>   <input type="hidden" name="email" />   <input type=" ...

  3. 再起航,我的学习笔记之JavaScript设计模式18(观察者模式)

    观察者模式 观察者模式(Observer): 又被称为发布-订阅者模式或消息机制,定义了一种依赖关系,解决了主体对象与观察者之间功能的耦合. 创建一个观察者对象 首先我们创建一个闭包对象,让其在页面加 ...

  4. MySQL问题总结(持续更新)

    CHAR和VARCHAR的区别 存储方式和检索方式不同: 1.CHAR固定长度字符类型.CHAR存储定长数据,CHAR字段上的索引效率高,比如定义char(10),那么不论你存储的数据是否达到了10个 ...

  5. sed修炼系列(四):sed中的疑难杂症

    本文目录:1 sed中使用变量和变量替换的问题2 反向引用失效问题3 "-i"选项的文件保存问题4 贪婪匹配问题5 sed命令"a"和"N" ...

  6. ASP.NET Core的身份认证框架IdentityServer4(7)- 使用客户端证书控制API访问

    前言 今天(2017-9-8,写于9.8,今天才发布)一口气连续把最后几篇IdentityServer4相关理论全部翻译完了,终于可以进入写代码的过程了,比较累.目前官方的文档和Demo以及一些相关组 ...

  7. jquery_mobile事件

    1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 < ...

  8. Http和Socket详解

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp59   这不是同一层的协议 socket是一个针对TCP和UDP编程的借 ...

  9. 云计算的三种服务模式IaaS、PaaS和SaaS的差别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt363 云服务"现在已经快成了一个家喻户晓的词了.如果你不知道Paa ...

  10. poj 1149经典网络流构图

    题意:m个猪圈,n个客户,每个客户给出选则猪圈的钥匙和需要购买猪的个数,其中每次客户购买时客户选则的猪圈数量可以相互更换,问最大购买数量. 思路:以客户作为除源点汇点之外的点,然后对于每个猪圈从源点连 ...