原文:
http://jcyanfan.iteye.com/blog/266542
进行文件上传一般有三种方式
1. 使用 fileUpLoad
2. 使用 smartFileUpLoad
(fileUpLoad 优于smartfileupload)
3. 自己编写类似的程序进行解析
fileUpLoad 是 apache 的一个开源项目,用来进行解析带有文件的请求处理。著名的 struts 的FormFile 就是用的它进行解析处理的。
4、
依赖包:commons-io
1. 首先页面上我们需要将表单设置下面类似的参数:
< form method="post" enctype="multipart/form-data" action=”” >
2. 然后我们需要在工程里导入所需要的包,可以在 apache 网站上下载:
http://jakarta.apache.org/commons/fileupload/
3. 在我们的servlet中可以获取到request参数,然后可以这样取传递过来的字段参数及文件参数:
下载commons-fileupload.jar放到Project-name\WEB-INF\lib下
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.util.regex.*;
import org.apache.commons.fileupload.*;
public class FileUpload
extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GB2312";
//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
try {
//临时缓冲文件目录,此处系统默认
File tempfile = new File(System.getProperty("java.io.tmpdir"));
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
// 设置最多只允许在内存中存储的数据,单位:字节
diskFileItemFactory.setSizeThreshold(4096);
//设置缓冲区目录,一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
diskFileItemFactory.setRepository(tempfile);
ServletFileUpload upload = new ServletFileUpload(diskFileItemFactory);
//DiskFileUpload upload = new DiskFileUpload(diskFileItemFactory);
//设置编码,解决上传文件名乱码
upload.setHeaderEncoding("GBK");
// 设置允许用户上传文件大小,单位:字节,这里设为2M
upload.setSizeMax(2 * 1024 * 1024);
//开始读取上传信息
List fileItems = upload.parseRequest(request);
// 依次处理每个上传的文件
Iterator iter = fileItems.iterator();
//正则匹配,过滤路径取文件名
String regExp = ".+(.+)$";
//过滤掉的文件类型
String[] errorType = {
".exe", ".com", ".cgi", ".asp"};
Pattern p = Pattern.compile(regExp);
while (iter.hasNext()) {
FileItem item = (FileItem) iter.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");
}
}
//保存上传的文件到指定的目录
//在下文中上传文件至数据库时,将对这里改写
item.write(new File("d:\\" + m.group(1)));
out.print(name + " " + size + "");
}
}
}
}
catch (IOException e) {
e.printStackTrace();
}
catch (FileUploadException e) {
//e.printStackTrace();
}
}
}
分享到:
相关推荐
此为本人自制的一款用于查杀<iframe>的软件,在vs 2003环境中利用c#语言开发的一款软件。可以双击readweb.exe直接运行。<br>用人格担保无病毒,但是...<br>上传文件中并不提供源代码,如果大家需要可以给我留言!<br>
一、文件上传 1. **依赖引入**:首先,你需要在项目中引入Spring MVC的依赖,确保`spring-webmvc`库在类路径中。例如,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>...
走过路过千万不要错过,绝对实用!<br>·支持所有的上传的文件类型<br>·原则上不限制上传的文件大小<br>·每次上传格式可用户...且每删除一个数据,上传在文件夹中的文件也相应删除,有效的控制了服务器负荷 <br><br>
88<br><br>0136 如何进行文本加密与解密 88<br><br>0137 如何区别0、空字符串、Null、Empty和Nothing 89<br><br>0138 从字符串中分离文件路径、文件名及扩展名 89<br><br>0139 如何批量替换某一类字符串 89...
在Spring MVC框架中,文件上传是一项常见的功能,用于接收用户通过表单提交的文件,如图片、文档等。为了实现这个功能,我们需要依赖一些特定的jar包。以下是一些核心的依赖及其作用: 1. **Spring MVC框架核心库**...
例如xml文件的形式是<student><age>1</age><age2>2</age2></student>,在Java文件中设置demo路径,要替换的值,最后分别生成xml文件,例如要换成aa,则xml两个,一个为<student><age>aa</age><age>2</age></student>,...
用vs.net2005写的在线文件管理系统,数据库是sqlser2000.<br>Ajax采用的是asp.net web extension 1.0.<br>实现功能包括:<br>1、一二级目录定制<br>2、大文件上传(200M)<br>3、评论<br>4、权限管理<br>其他自己看吧...
一直以来,由于FileSystemObject的局限,所以ASP最大...就写了这个类,给大家一<br><br>个方便,整个类放在一个文件中: upload_5xsoft.inc 在 Example 目录下还有一个完整的多文件上传示<br><br>例程序,可以直接使用。<br>
<head><title>405 Not Allowed</title></head> <body bgcolor="white"> <center><h1>405 Not Allowed</h1></center> <hr><center>nginx/1.2.0</center> </body> </html> ``` 然而,在某些特殊的应用场景下,...
基于C++实现类UNIX的二级文件系统源码+课设报告+使用说明(操作系统课程设计).zip ...- 12)fout <filename>:将缓存区中的所有字节写入<filename>指向的一级操作系统的实际文件 - 13)bshow :查看缓存区信息
<br><br>2007/7/21<br>Version 3.2.3 Stable<br><br>Updates:<br>1) 修正上传功能设置为自动改名后,上传文件之后网络地址栏的地址仍然是文件原名的BUG。<br>2) 修正控件在浏览器滚动条下端位置时弹出DIV窗口会出现...
操作系统课程设计基于C++实现的二级文件系统源码+项目说明+设计报告.zip ...- 12)fout <filename>:将缓存区中的所有字节写入<filename>指向的一级操作系统的实际文件 - 13)bshow :查看缓存区信息
<br>4.3.3 使用HTMLInputFile控件接受文件上传 <br>4.4 小结 <br><br>第二部分 高级ASP.NET页面开发<br><br>第5章 用用户控件创建自定义控件 <br><br>5.1 用用户控件包含标准内容 <br>5.2 显露用户控件中的属性和...
<br>4.3.3 使用HTMLInputFile控件接受文件上传 <br>4.4 小结 <br><br>第二部分 高级ASP.NET页面开发<br><br>第5章 用用户控件创建自定义控件 <br><br>5.1 用用户控件包含标准内容 <br>5.2 显露用户控件中的属性和...
align=center><br> <%if not founduser then%><br> <tr><td colspan=2><BR><br> 欢迎光临 <B><%=Forum_info(0)%></B>.<BR>如果这是你第一次访问本站, 请点击论坛上方的链接阅读<a href=boardhelp.asp>论坛帮助</a>....
C#源码大集合 01(共3卷)<br><br>之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷)<br><br><br>├─C#源码第一部分<br>│ ├─第1章 控件操作<br>│ │ ├─实例1 如何...
程序功能:<br> <br> 一个小巧妙的统计程序.<br> <br> 用到知识点:<br> <br> 1.顶层表单的运用.<br> <br> 2.菜单在顶层表单中的运用.<br> ...由于文件上传时不能太大,所以删除了.exe文件. <br> <br>
/*<br>说明:<br> 一、使用edtftpj 2.0.1开源包<br> 二、实现了以下功能<br> 1、上传指定文件夹(包括子文件和文件夹)<br> 2、下载FTP上指定的文件夹<br> 3、上传指定文件夹下的所有文件到FTP指定目录下<br> 4、...
C#源码大集合 03(共3卷)<br><br>之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷)<br><br><br>├─C#源码第一部分<br>│ ├─第1章 控件操作<br>│ │ ├─实例1 如何...
实例34 随机读取文件程序示例<br> 实例35 故事接龙<br> 实例36 文件上传<br> 实例37 在浏览器中打开文件<br> 实例38 文件下载<br> 实例39 用jspSmartUpload组件实现文件上传<br> 实例40 应用jspSmartUpload组件进行...