文件上传2010-9-4 21:45
1.导入:commons-fileupload.jar commons-io.jar
2.在服务器上的项目根目录下手动创建uploadFile文件夹用于存放上传文件,
在uploadFile下创建temp文件夹用于缓存过大的图片。
补充:也可通过代码实现上传时自动创建存放上传文件的目录。
3.注意:上传图片路径:String uploadPath = req.getRealPath("/")+"/uploadFile";
查看图片路径:String viewPath = request.getContextPath()+"/uploadFile";
4.不同操作系统获取文件路径分隔符
包为java.util.Properties
获取方法为Properties.getProperty(“file.separator”)
补充:“/”在windows linux 系统上都适用。
5.上传用到的Servlet:FileUpload.java
public class FileUpload extends HttpServlet {
static Logger log = Logger.getLogger(FileUpload.class);
public void destroy() {
}
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
res.setContentType( "text/html; charset=GBK");
String picture_name = "";
String picture_id = "";
String product_id = "";
PrintWriter out=res.getWriter();
String uploadPath = req.getRealPath("/")+"/uploadFile"; // 用于存放上传文件的目录
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(1024*1024*4);
// the location for saving data that is larger than getSizeThreshold()
factory.setRepository(new File(uploadPath+"/temp")); // 用于存放临时文件的目录
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum size before a FileUploadException will be thrown
upload.setSizeMax(1024*1024*8);
try{
List fileItems = upload.parseRequest(req);
// assume we know there are two files. The first file is a small
// text file, the second is unknown and is written to a file on
// the server
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()){
picture_name = item.getString();
String[] params = picture_name.split("==");
if(params!=null&¶ms.length>1){
product_id = params[0];
picture_id = params[1];
}
log.error("==========产品ID="+product_id+"====图片ID="+picture_id);
}
//不是文件域的所有表单信息
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)));
//取到上传文件的扩展名
String extand = m.group(1).substring(m.group(1).indexOf("."));
// 上传新图片
String picName = RandomNum.getRandomNum()+extand;
//将图片重新命名为任意位数的随机数
String picPath = uploadPath +"/"+ picName; //新图片路径
item.write(new File(picPath));//写入新图片
log.error("图片上传成功!");
out.print("图片文件上传成功!<br>"+name+" "+size+"<br>");
PictureManager pictureManager = PictureManager.getInstance();
// Picture picture = pictureManager.searchPicture(picture_id);
// log.error("=======旧图片名称====="+picture.getPicture_path());
//构建新图片数据库信息保存对象
Picture pic = new Picture();
pic.setProduct_id(product_id);
pic.setPicture_id(picture_id);
log.error("=======product_id====="+product_id);
pic.setPicture_path(picName);
if("0".equals(picture_id)){
//添加记录
pictureManager.addPicture(pic);
log.error("添加记录成功!");
res.sendRedirect("../servlet/PictureServlet?action=list&product_id="+product_id);
}else{
//删除旧图片
Picture picture = pictureManager.searchPicture(picture_id);
String oldpicPath = uploadPath +"/"+picture.getPicture_path(); //获取旧图片路径
oldpicPath=oldpicPath.replaceAll("\\\\", "/");
File oldPic = new File(oldpicPath);
//oldPic.createNewFile();
if(oldPic.exists()){
oldPic.delete();
log.error("旧图片删除成功!");
}
//更新记录
pictureManager.modifyPicture(pic);
log.error("更新记录成功!picName="+picName);
res.sendRedirect("../servlet/PictureServlet?action=list&product_id="+product_id);
}
}
catch(Exception e){
out.println(e);
log.error("图片上传失败!");
}
}
else
{
throw new IOException("fail to upload");
}
}
}
}
catch (IOException e){
out.println(e);
}
catch (FileUploadException e){
out.println(e);
}
// 保存上传的文件到指定的目录
// 在下文中上传文件至数据库时,将对这里改写
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occure
*/
public void init() throws ServletException {
// Put your code here
}
}
6. 在web.xml文件中配置上传的servlet
<servlet>
<servlet-name>FileUpload</servlet-name>
<servlet-class>com.servlet.FileUpload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileUpload</servlet-name>
<url-pattern>/servlet/FileUpload</url-pattern>
</servlet-mapping>
<servlet-mapping>
7.如果可以最好将servlet放在项目的根目录下。
分享到:
相关推荐
commons-fileuplod2.1,commons-io1.4.zip commons-fileuplod2.1,commons-io1.4.zip commons-fileuplod2.1,commons-io1.4.zip commons-fileuplod2.1,commons-io1.4.zip
接下来,我们将详细讨论如何使用Commons FileUpload进行文件上传。 1. **初始化Servlet环境**:在Servlet容器(如Tomcat)中,你需要配置一个Servlet来接收文件上传请求。在Servlet的`init()`方法中,可以设置`...
Apache Commons IO和Commons FileUpload两个库为开发者提供了强大的文件处理能力,特别是针对文件上传操作。这两个库是Java社区广泛使用的开源组件,它们简化了原本复杂的HTTP多部分请求解析过程。 Apache Commons ...
Apache Commons FileUpload库是Java社区提供的一个强大且灵活的文件上传解决方案。这个库使得处理HTTP请求中的多部分数据(通常用于文件上传)变得非常简单。下面我们将深入探讨如何使用Apache Commons FileUpload...
【使用commons-fileupload上传文件】 Apache Commons FileUpload是Apache组织的一个子项目,专注于处理HTTP文件上传。这个组件提供了一个简洁的API,使得开发者能够轻松地在Java应用中处理由浏览器发送的多部分...
Apache Commons项目为开发者提供了两个非常重要的库:Commons IO和Commons FileUpload,这两个库使得文件上传操作变得简单易行。在"commons-文件上传必备jar包二合一-io1.4+fileupload1.2.1"中,包含了这两个库的...
在Java Web开发中,文件上传是一项常见的功能,Apache Commons FileUpload库为开发者提供了方便、灵活的文件上传解决方案。本教程将深入讲解如何使用`commons-fileupload`库处理中文乱码问题以及实现多文件上传。 ...
本篇将详细讲解如何使用Commons FileUpload来实现文件上传的功能。 首先,理解HTTP协议中的多部分数据是至关重要的。在HTML表单提交文件时,通常会使用`enctype="multipart/form-data"`属性,此时,数据会被分割成...
在`描述`中提到的`commons-fileupload-1.2.2.jar`和`commons-io.jar`是实现文件上传功能所必需的依赖库。`commons-fileupload-1.2.2.jar`是核心库,包含了文件上传的处理逻辑;`commons-io.jar`则是Apache Commons ...
- Commons FileUpload允许设置最大文件大小和总上传大小,防止服务器被大文件或大量文件耗尽资源。超过限制的文件会被拒绝,或者在磁盘上临时存储。 7. **异常处理**: - 在处理文件上传过程中,可能会遇到各种...
`文件上传的jar,commons-io,flieupload`这个标题所指的,就是利用Apache Commons IO和Apache Commons FileUpload两个库来实现JSP中的文件上传功能。这两个库都是Apache软件基金会开源的Java工具包,为处理输入/输出...
Apache Commons FileUpload是Java中处理文件上传的一个强大库,它简化了这一过程。本教程将详细介绍如何利用commons-fileupload实现文件上传功能,并提供一个简单的实例。 **一、Apache Commons FileUpload简介** ...
在使用 Apache Commons FileUpload 进行文件上传之前,你需要确保以下组件已经准备就绪: 1. **引入依赖**:首先,你需要下载并添加 `org.apache.commons.io` 和 `log4j` 的 JAR 包到你的项目类路径中。在本例中,`...
apache commons.fileupload上传组件在上传文件时,在调用parseRequest方法时,先将输入流上传到服务器临时目录,在之后的文件处理过程中,再将临时目录下保存的文件复制到指定的目录,多了一道转储步骤。本实现抽取...
在本文中,我们将深入探讨如何使用Apache Commons FileUpload组件来实现文件上传功能。Apache Commons FileUpload是一个用于处理HTTP请求中的多部分数据的Java库,它使得在Servlet或JSP应用中处理文件上传变得简单易...
标题“org.apache.commons.fileupload 文件上传至数据库”指的是使用Apache Commons FileUpload库将用户上传的文件存储到数据库中的技术。Apache Commons FileUpload是Apache软件基金会的一个开源项目,它提供了一个...
### Commons-FileUpload 实现文件上传下载 #### 知识点概述 Commons-FileUpload 是 Apache 提供的一个用于处理 HTTP 文件上传的组件。它基于 Servlet 规范,并且能够解析来自 `multipart/form-data` 编码类型的 ...
在标题和描述中提到的"commons-fileupload-1.2.1"是该库的一个特定版本,它允许开发者在Java应用程序中实现文件上传的功能。这个版本在发布时可能是最新的,但现在可能已经有一些更新。 使用Apache Commons ...
Apache Commons FileUpload是一个Java库,专门用于处理HTTP协议中的文件上传功能。...配合Commons Lang和Commons IO,开发者可以更高效地管理上传文件的生命周期,从解析请求到存储文件,再到后续的操作和验证。