首先前端的表单是这个形式:

<form  target="_self" method="post" action="fileUploadMultyServlet" enctype="multipart/form-data" >

<label>上传材料<input type="file" id="image" name='image'></label>
<label>上传材料<input type="file" id="image1" name='image1'></label>
<label>上传材料<input type="file" id="image2" name='image2'></label>
<input type="submit" class="btn-u" value="提交">

</form>

然后上传图片的servlet代码如下:

public class FileUploadMultyServlet extends HttpServlet {

private static final long serialVersionUID = 1L;
private File uploadPath;
private File tempPath;

@Override
public void init() throws ServletException {

uploadPath = new File(getServletContext().getRealPath("upload"));
System.out.println("uploadPath=====" + uploadPath);
// 如果目录不存在
if (!uploadPath.exists()) {
// 创建目录
uploadPath.mkdir();
}

// 临时目录
// File tempFile = new File(item.getName())构造临时对象
tempPath = new File(getServletContext().getRealPath("temp"));
if (!tempPath.exists()) {
tempPath.mkdir();
}

// 如果不显示调用父类方法,就不会有itemManager实例,因此会造成空指针
super.init();

}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}

@SuppressWarnings("deprecation")
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

// 从item_upload.jsp中拿取数据,因为上传页的编码格式跟一般的不同,使用的是enctype="multipart/form-data"
// form提交采用multipart/form-data,无法采用req.getParameter()取得数据
// String itemNo = req.getParameter("itemNo");
// System.out.println("itemNo======" + itemNo);

/******************************** 使用 FileUpload 组件解析表单 ********************/
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
factory.setRepository(tempPath);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8");
// maximum size before a FileUploadException will be thrown
upload.setSizeMax(1000000 * 20);

try {
List<?> items = upload.parseRequest(request);
String data = "";
int i = 0;
String itemNo = "";
String fileName = "";
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
i++;
data = item.getString();
if ("itemNo".equals(item.getFieldName())) {
itemNo = item.getString();
}
}
// 是否为input="type"输入域
else if (!item.isFormField()) {
// 上传文件的名称和完整路径
fileName = item.getName();
System.out.println("filename==="+fileName);
long size = item.getSize();
// 判断是否选择了文件
if ((fileName == null || fileName.equals("")) && size == 0) {
continue;
}else{
fileName = System.currentTimeMillis() + ".jpg";
}
// 截取字符串 如:C:\WINDOWS\Debug\PASSWD.LOG
fileName = fileName.substring(
fileName.lastIndexOf("\\") + 1, fileName.length());

// 保存文件在服务器的物理磁盘中:第一个参数是:完整路径(不包括文件名)第二个参数是:文件名称
// item.write(file);
// 修改文件名和物料名一致,且强行修改了文件扩展名为gif
// item.write(new File(uploadPath, itemNo + ".gif"));
// 将文件保存到目录下,不修改文件名
item.write(new File(uploadPath, fileName));
}
}
response.sendRedirect(request.getContextPath() + "/people_require.html");
} catch (Exception e) {
e.printStackTrace();
}

}
}

最后在你Tomcat项目路径下的upload可以看到三张图片,效果如下:

Servlet支持上传多张图片的更多相关文章

  1. 微信JSSDK上传多张图片

    之前是使用for循环实现的,但是安卓手机没有问题,苹果手机只能上传最后一张图片. 好在有高手在前面趟路,实用的循环调用.苹果是没有,安卓不清楚.以下内容转自:http://leo108.com/pid ...

  2. springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)

    参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp ...

  3. Servlet文件上传下载

    今天我们来学习Servlet文件上传下载 Servlet文件上传主要是使用了ServletInputStream读取流的方法,其读取方法与普通的文件流相同. 一.文件上传相关原理 第一步,构建一个up ...

  4. java web学习总结(二十四) -------------------Servlet文件上传和下载的实现

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  5. Servlet异步上传文件

    这里需要用到插件ajaxfileupload.js,jar包:commons-fileupload-1.3.2.jar,commons-io-2.5.jar 注意红色部分的字!!!! 1.创建一个we ...

  6. iOS -- 上传多张图片 后台(PHP)代码和上传一张的一样

    // 上传多张图片 - (void)send { // 设置初始记录量为0 self.count = 0; self.upcount = 0; // 设置初始值为NO self.isUploadPic ...

  7. 如何让WordPress支持上传更多文件类型

    如何让WordPress支持上传更多文件类型   可以在functions.php中这样写: 1 2 3 4 5 6 7 8 9 add_filter('upload_mimes', 'wpdit_f ...

  8. ServletFileUpload(Servlet文件上传)

    //**文件上传** form表单提交必须指定Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型"multipart/form-data" //1.创建磁盘文件项目工 ...

  9. php用jquery-ajax上传多张图片限制图片大小

    php用jquery-ajax上传多张图片限制图片大小 /** * 上传图片,默认大小限制为3M * @param String $fileInputName * @param number $siz ...

随机推荐

  1. AForge.NET是一个专门为开发者和研究者基于C#框架设计的视频录像

    AForge.NET是一个专门为开发者和研究者基于C#框架设计的,他包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,模糊系统,机器人控制等领域.这个框架由一系列的类库组成.主要包括有 ...

  2. PHP中文件包含的路径问题

    在程序中当前文件夹下文件路径可以表示为3种:1)绝对路径,2)相对路径,3)直接文件名 例如在/var/www下的a.php:1)/var/www/a.php 2)./a.php 3)a.php 在P ...

  3. js事件监听器用法实例详解-注册与注销监听封装

    本文实例讲述了js事件监听器用法.分享给大家供大家参考.具体分析如下: 1.当同一个对象使用.onclick的写法触发多个方法的时候,后一个方法会把前一个方法覆盖掉,也就是说,在对象的onclick事 ...

  4. QT第五天学习

    回顾: QFile QTextSream QDataSream QFileInfo QDir Dir entryList 返回目录下所有文件和目录的名字 entryInfoList 返回目录下所有文件 ...

  5. Spark SQL原理及实战

    一.Spark SQL的发展 1.spark SQL和shark SparkSQL的前身是Shark,给熟悉RDBMS但又不理解MapReduce的技术人员提供快速上手的工具,Hive应运而生,它是当 ...

  6. Canvas createRadialGradient API

    Canvas createRadialGradient API <!DOCTYPE html> <html lang="en"> <head> ...

  7. ASP.NET Zero--13.一个例子(6)商品分类管理-删除分类

    1.添加按钮 首先添加一个删除按钮,打开文件Index.js[..\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Views\Category\Index.j ...

  8. 3D游戏开发之在UE4中创建非玩家角色(NPC)

    接着上节我们继续学习,现在我们来创建一些NPC(non-playable characters,非玩家角色).在这个游戏中,当我们靠近NPC时,它们会做出相应的反应. 一 创建C++类 1) 在UE编 ...

  9. Js获取复选框checkbox的值

    var emps= $("input[name='emp']:checked"); var employee= ""; emps.each(function() ...

  10. js实现360度图片旋转

    ▓▓▓▓▓▓ 大致介绍 这次是一个简单的效果,就是思路的问题 效果: ▓▓▓▓▓▓ 思路 旋转的效果就是根据鼠标的的移动距离来显示不同的图片,形成视觉差,仿佛就是在正真的旋转 由于效果是根据鼠标的移动 ...