servlet 实现多个文件上传,完整代码:
package com.commpim.performance;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* Servlet implementation class for Servlet: UploadFile2Servlet
*
*/
public class UploadFilet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
//用于存放上传文件的目录
private String uploadPath="E:\\upFile\\";
private File tempPath=new File("E:\\upFile\\temp");
/**
* 初始化Servlet,确保需要使用的目录都被建立<br>
* @throws javax.servlet.ServletException
*/
@Override
public void init() throws ServletException{
if(!new File(uploadPath).isDirectory())
new File(uploadPath).mkdir();
if(!tempPath.isDirectory())
tempPath.mkdir();
}
/**
* 销毁Servelt
*/
public void destory(){
super.destroy();
}
/**
* @param request
* @param response
* @throws javax.servlet.ServletException
* @throws java.io.IOException
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//创建一个上传项目工厂,并设置其缓存数据大小和临时文件保存位置
DiskFileItemFactory factory=new DiskFileItemFactory();
factory.setSizeThreshold(4096);
factory.setRepository(tempPath);
//使用项目工厂创建一个ServletFileUpload对象,用于解析文件上传请求
//并设置可以上传的文件的最大字节数,超过会抛出异常
ServletFileUpload upload=new ServletFileUpload(factory);
upload.setSizeMax(1000000);
upload.setHeaderEncoding("utf-8");
List fileItems=null;
try{
//开始读取上传信息
fileItems=upload.parseRequest(request);
//依次处理每一个上传的文件
Iterator itor=fileItems.iterator();
//正则匹配,过滤路径取文件名
String regExp=".+\\\\(.+)$";
//过滤文件类型
String[] errorType={".exe",".com",".cgi",".asp"};
Pattern p=Pattern.compile(regExp);
while(itor.hasNext()){
FileItem item=(FileItem)itor.next();
//忽略其他不是文件域的所有其他表单信息
if(!item.isFormField()){
String name=item.getName();
long size=item.getSize();
if((name==null||name.equals(""))&&size==0)
continue;
Matcher m=p.matcher(name);
boolean result=m.find();
//如果是允许上传的文件类型就执行上传操作
if(result){
for(int temp=0;temp<errorType.length;temp++){
if(m.group(1).endsWith(errorType[temp])){
throw new IOException(name+":wrong type");
}
}
try{
//保存文件到指定的目录,如果是保存到数据库,改写这里
item.write(new File(uploadPath,m.group(1)));
}catch(Exception e){
}
}else{
throw new IOException("fail to upload");
}
}
}
}catch(IOException e){
e.printStackTrace();
}catch(FileUploadException e1){
e1.printStackTrace();
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*/
public String getServletInfo() {
return "cliff";
}
// </editor-fold>
}
html 代码:
<html>
<body>
<form name="fileform" method="post" action="UploadFilet"
style="display: none; font-weight: bold;"
enctype="multipart/form-data">
<div align="center">
<table width="421" border="1" bordercolor="#C5D6FC"
id="urltable">
<tr>
<td width="421">
<div align="center">Upload Files</div>
</td>
</tr>
<tr>
<td><input type="file" name="url_1" size="62" /></td>
</tr>
<tr>
<td><input name="url_2" type="file" size="62" /></td>
</tr>
</table>
</div>
<p align="center"><input type="submit" name="Submit"
value="Submit" /></p>
</form>
</body>
</html>
参考
http://apps.hi.baidu.com/share/detail/23055527
分享到:
相关推荐
在示例中,有两个文件输入字段,`file1`和`file2`,用户可以上传多个文件。 接下来,我们创建Servlet来处理文件上传。这里有一个名为`FileUpLoad.java`的Servlet示例: ```java package com.servlet.fileupload; ...
总结起来,Servlet实现多文件上传涉及以下几个步骤: 1. 捕获`multipart/form-data`类型的POST请求。 2. 使用`HttpServletRequest`的`getParts()`方法解析上传的文件。 3. 遍历`Part`对象,获取文件信息并保存到...
本教程将详细介绍如何通过Servlet来实现CKEditor的文件上传功能。 首先,我们需要了解Servlet的概念。Servlet是Java服务器端程序,用于处理来自客户端(如浏览器)的请求并返回响应。在CKEditor的文件上传场景中,...
综上所述,Servlet实现的文件上传涉及了HTTP协议、Servlet API、文件存储策略、安全控制等多个方面。理解并熟练掌握这些知识点,对于开发高效且安全的文件上传功能至关重要。在实际项目中,我们还需要考虑并发处理、...
总结来说,Servlet实现文件上传功能涉及了HTTP协议、Servlet API的使用、文件I/O操作、安全性考量以及用户交互优化等多个方面。通过深入理解和实践这些知识点,我们可以构建出健壮、安全的文件上传功能。
这里我们将深入探讨如何使用这三个技术实现文件上传功能。 Servlet是Java编程语言中的一个接口,由Java Servlet API提供,用于扩展服务器的功能。在文件上传场景中,Servlet通常作为接收HTTP请求并处理数据的后端...
在上面的代码中,Servlet监听"/upload"路径,当接收到文件上传请求时,使用`ServletFileUpload`解析请求,并将每个文件项写入到指定的服务器目录("uploads/")。 文件下载部分则相对简单。Servlet可以提供一个链接...
总结,这个项目展示了如何在传统的Java Web环境中使用JSP和Servlet实现文件上传和下载功能,同时利用Apache Commons FileUpload库简化了文件上传的复杂性。对于初学者,这是一个很好的实践案例,能够深入理解MVC模式...
- **MultipartRequest**: 在Servlet中,处理文件上传通常需要解析多部分表单数据,这可以通过Apache Commons FileUpload库或Java内置的`Part`接口实现。`MultipartRequest`是Apache Commons FileUpload库中的一个类...
"基于Servlet实现文件的上传与下载"是一个常见的实战任务,它涵盖了网络编程、多线程和文件I/O等多个核心概念。这里我们将深入探讨如何利用Servlet来实现这两个功能。 首先,让我们了解Servlet的工作原理。Servlet...
本示例通过JavaScript(js)、JavaServer Pages(jsp)和Servlet技术实现了一个跨域多文件上传的解决方案。以下将详细介绍这些技术如何协同工作以实现这一功能。 首先,JavaScript(js)是客户端的主要编程语言,...
### jsp+servlet实现文件上传下载 在现代Web开发中,文件上传下载是常见的功能之一。JSP(JavaServer Pages)与Servlet技术结合可以轻松实现这一功能。本篇将详细介绍如何利用jspSmartUpload组件实现文件的上传与...
总结,实现JSP、Servlet和MySQL的文件上传功能,需要创建一个支持文件上传的JSP表单,编写一个Servlet来处理上传请求,提取文件信息,存储文件到服务器,以及使用JDBC连接MySQL并将文件信息存入数据库。整个过程涉及...
【摘要】:该文介绍了在B/S模式下,通过JSP/Servlet技术实现文件上传的方法。...笔者主要介绍用JSP方式和Servlet方式实现的两个代码简短又高效率的文件上传功能。在此基础上,可以对文件上传功能进行进一步的完善......
在IT行业中,多文件上传是一项常见的需求,尤其是在网站开发中,比如用户可能需要一次上传多个图片或者文档。Uploadify是一款非常流行的JavaScript插件,它能够实现异步的、基于Ajax的多文件上传功能,极大地提升了...
本文将详细介绍如何使用Servlet实现文件上传功能,包括支持多文件上传。关键知识点包括Servlet接口、Multipart解析器、文件处理和常见配置。 首先,为了实现文件上传,我们需要依赖Apache Commons FileUpload库,它...
在这个场景下,我们将探讨如何结合`jQuery ajaxFileUpload` 和Servlet实现文件上传的功能。 首先,`jQuery ajaxFileUpload` 插件允许用户在不刷新页面的情况下上传文件,提供了一种友好的用户体验。它的主要优点...
5. **并发处理**:如果需要支持多个文件上传,要考虑并发控制,避免服务器负载过高。 总的来说,Vue.js和Servlet的结合为Web应用提供了强大的文件上传能力。Vue.js负责用户交互和前端逻辑,Servlet处理后端业务逻辑...
总的来说,实现Servlet多文件上传(带进度条)涉及的技术包括:Servlet的Part接口、文件流操作、Ajax异步请求、前端的进度条更新以及文件上传的错误处理和安全性措施。通过这些技术的结合,我们可以创建出一个高效且...
本文将深入探讨如何使用Java和Servlet实现多文件上传,而无需依赖任何第三方库,如Apache Commons FileUpload。以下是对该技术的详细解释: 首先,我们需要理解HTTP协议中的`multipart/form-data`编码类型,这是...