完整代码如下:
package com.commpim.performance;
/**
* @author beaver
* @version 创建时间:2011-12-13 下午06:58:52
* 上传多个文件
*/
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;
import org.apache.commons.fileupload.util.Streams;
/**
* Servlet implementation class for Servlet: UploadFile2Servlet
*
*/
public class UploadFile2Servlet 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(100000000);
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{
//保存文件到指定的目录,如果是保存到数据库,改写这里
String fileName = name.substring(item.getName().lastIndexOf("\\")+1, name.length());//获得上传文件的文件名
String date=new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());
fileName = fileName+"_"+date;
String fn = uploadPath+fileName;
File newf = new File(fn);
if(!newf.exists()) {
newf.createNewFile();
}
InputStream in = item.getInputStream();
FileOutputStream fo = new FileOutputStream(newf);
BufferedOutputStream out = new BufferedOutputStream(fo);//获得文件输出流
Streams.copy(in, out, true);//开始把文件写到你指定的上传文件夹
// 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>
}
分享到:
相关推荐
当用户选择文件后,这些文件会被封装在一个名为`HttpPostedFileBase`的对象中,可以通过`Request.Files`集合访问。然而,单个`<input type="file">`只能选择一个文件,所以要实现多文件上传,我们需要使用HTML5的新...
**FastDFS** 是一款基于 C 语言开发的开源分布式文件系统,专为互联网应用设计,旨在提供高性能、高可用性的文件存储解决方案。它具备冗余备份、负载均衡及线性扩展能力,适用于构建大规模文件服务器集群。 #### 二...
为了避免文件名冲突,通常会为上传的文件生成唯一的文件名,这可以通过生成UUID或结合时间戳来实现。 这个“文件上传java测试程序.rar”应该包含了实现上述部分的代码示例,特别是如何在IDEA中配置和运行。通过...
ASP.NET 文件与图片处理是Web开发中的重要环节,它涉及到用户交互、文件上传、安全验证以及图像处理等多个方面。在ASP.NET中,处理文件和图片通常利用内置的控件和类库来实现,如FileUpload控件用于文件上传,而...
标题中的"FME按属性字段批量将shp转cad模板"涉及到的是GIS(地理信息系统)领域的一个常见任务,即使用FME(Feature Manipulation Engine)工具将Shapefile(一种常见的矢量地理数据格式)转换为CAD(Computer-Aided...
这里我们将深入探讨如何使用这三个技术实现文件上传功能。 Servlet是Java编程语言中的一个接口,由Java Servlet API提供,用于扩展服务器的功能。在文件上传场景中,Servlet通常作为接收HTTP请求并处理数据的后端...
在ASP.NET中,多文件上传是一项常见的功能,用于在B/S(浏览器/服务器)架构下处理用户上传的多个文件。本学习笔记将详细介绍如何在ASP.NET环境中实现这一功能,并确保文件上传时不重复。 首先,我们需要了解ASP...
假设我们要创建一个名为"example.txt"的文件,并在其中写入"Hello, World!",脚本中会包含类似`echo Hello, World! > example.txt`的命令。`>`符号是重定向操作符,它把命令的输出重定向到文件中,如果文件不存在,...
这个表单通常会包含一个`<input type="file">`元素,允许用户从本地文件系统选择文件。例如: ```html ``` 这里的`enctype="multipart/form-data"`至关重要,因为它告诉浏览器以多部分/二进制格式发送数据,...
如果需要上传多个文件,可以添加多个这样的控件。 接着,确保`<form>`标签包含以下属性: ```html <form method="post" enctype="multipart/form-data" runat="server"> ``` `enctype="multipart/form-data"`是至关...
这里使用当前时间戳作为文件名的一部分,以避免文件名重复,这对于大型系统中处理大量文件尤为重要。 #### 6. 保存文件 ```csharp _upfile.SaveAs(playFile); ``` 最后,使用`SaveAs`方法将文件保存到服务器上的...
5. **多文件上传**:虽然这里只提到单个文件上传,但帮助类也可以扩展支持多个文件上传。只需遍历`Request.Files`集合即可处理每个上传的文件。 下面是一个简单的`UpLoadFile.cs`类的示例实现: ```csharp using ...
在.NET框架中,多文件上传是一项常见的功能,尤其在Web应用程序中,用户可能需要一次上传多个文件,例如图片、文档或其他类型的数据。本篇将详细探讨如何在ASP.NET环境中实现多文件上传,以及相关的技术要点。 首先...
分布式文件系统FastDFS是一款用C语言编写的开源文件系统,专为互联网设计,注重冗余备份、负载均衡和线性扩展。它提供了高效的文件上传和下载服务,方便构建高性能的文件服务器集群。FastDFS架构主要由Tracker ...
FastDFS支持集群部署,Tracker Server可以有多个,它们之间是平等关系,互相备份,避免单点故障。客户端通过轮询方式与Tracker Server交互。Storage Server集群采用分组存储模式,一个组内的Server互相同步文件,...
这段代码展示了如何在Web应用中实现图片文件的上传验证、存储以及添加水印的过程,涵盖了文件类型和大小的检查、图像格式的转换和水印的添加等多个细节,对于开发人员理解和实现类似的文件上传功能具有较高的参考...
【ASP批量上传源代码】是一种在ASP(Active Server Pages)环境中实现文件批量上传的技术,它大大提升了用户体验,避免了用户需要逐个上传文件的繁琐过程。ASP是微软开发的一种服务器端脚本语言,常用于构建动态网页...
Java标准库提供了一个名为`javax.servlet.http.Part`的接口,可以用来处理这些上传的文件。 具体实现时,Servlet需要实现`doPost`方法,这是HTTP POST请求的处理点。在`doPost`中,我们可以遍历`HttpServletRequest...
- **文件名重命名**:为了避免文件名冲突,通常会在保存文件时为其生成唯一的名称,例如结合时间戳或随机数。 - **权限控制**:确保只有授权用户才能上传文件,并对上传目录设置适当的读写权限。 5. **错误处理**...
6. **数据库管理**:实验中使用了MySQL数据库存储用户信息,创建了名为`filetransfer`的数据库,以及包含`id`、`username`和`password`字段的`user`表,用于用户注册和登录。 7. **Python编程**:实验使用Python ...