`

Java文件上传组件 common-fileUpload 使用教程

    博客分类:
  • java
阅读更多

最近项目中,在发布商品的时候要用到商品图片上传功能(网站前台和后台都要用到),所以单独抽出一个项目来供其他的项目进行调用 ,对外透露的接口的为两个servlet供外部上传和删除图片,利用到连个jarcommons-fileupload-1.2.1.jar,commons-io-1.4.jar

项目结构如下:

项目结构图

其中com.file.helper主要提供读相关配置文件的帮助类

com.file.servlet 是对外提供调用上传和删除的图片的servlet

com.file.upload 是主要提供用于上传和删除图片的接口

1、FileConst类主要是用读取文件存储路径和设置文件缓存目录 允许上传图片的最大值

 

01 package com.file.helper;
02  
03 import java.io.IOException;
04 import java.util.Properties;
05  
06 public class FileConst {
07  
08     private static Properties properties= new Properties();
09     static{
10         try {
11             properties.load(ReadUploadFileType.class.getClassLoader().getResourceAsStream("uploadConst.properties"));
12         catch (IOException e) {
13             e.printStackTrace();
14         }
15     }
16      
17     public static String getValue(String key){
18         String value = (String)properties.get(key);
19         return value.trim();
20     }
21 }
2、ReadUploadFileType读取允许上传图片的类型和判断上传的文件是否符合约束的文件类型

 

 

01 package com.file.helper;
02  
03 import java.io.File;
04 import java.io.IOException;
05 import java.util.ArrayList;
06 import java.util.List;
07 import java.util.Properties;
08  
09 import javax.activation.MimetypesFileTypeMap;
10  
11  
12  
13 /**
14  * 读取配置文件
15  * @author Owner
16  *
17  */
18 public class ReadUploadFileType {
19  
20      
21     private static Properties properties= new Properties();
22     static{
23         try {
24             properties.load(ReadUploadFileType.class.getClassLoader().getResourceAsStream("allow_upload_file_type.properties"));
25         catch (IOException e) {
26             e.printStackTrace();
27         }
28          
29     }
30     /**
31      * 判断该文件是否为上传的文件类型
32      * @param uploadfile
33      * @return
34      */
35     public static Boolean readUploadFileType(File uploadfile){
36         if(uploadfile!=null&&uploadfile.length()>0){
37             String ext = uploadfile.getName().substring(uploadfile.getName().lastIndexOf(".")+1).toLowerCase();
38             List<String> allowfiletype = new ArrayList<String>();
39             for(Object key : properties.keySet()){
40                 String value = (String)properties.get(key);
41                 String[] values = value.split(",");
42                 for(String v:values){
43                     allowfiletype.add(v.trim());
44                 }
45             }
46             // "Mime Type of gumby.gif is image/gif"
47             return allowfiletype.contains( newMimetypesFileTypeMap().getContentType(uploadfile).toLowerCase())&&properties.keySet().contains(ext);
48         }
49         return true;
50     }
51      
52      
53 }
3、FileUpload主要上传和删除图片的功能

 

 

001 package com.file.upload;
002  
003 import java.io.File;
004 import java.util.Iterator;
005 import java.util.List;
006  
007 import javax.servlet.http.HttpServletRequest;
008  
009 import org.apache.commons.fileupload.FileItem;
010 import org.apache.commons.fileupload.FileUploadException;
011 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
012 import org.apache.commons.fileupload.servlet.ServletFileUpload;
013  
014 import com.file.helper.FileConst;
015 import com.file.helper.ReadUploadFileType;
016  
017 public class FileUpload {
018      private static String uploadPath = null;// 上传文件的目录
019      private static String tempPath = null// 临时文件目录
020      private static File uploadFile = null;
021      private static File tempPathFile = null;
022      private static int sizeThreshold = 1024;
023      private static int sizeMax = 4194304;
024      //初始化
025      static{
026            sizeMax  = Integer.parseInt(FileConst.getValue("sizeMax"));
027            sizeThreshold = Integer.parseInt(FileConst.getValue("sizeThreshold"));
028            uploadPath = FileConst.getValue("uploadPath");
029            uploadFile = new File(uploadPath);
030            if (!uploadFile.exists()) {
031                uploadFile.mkdirs();
032            }
033            tempPath = FileConst.getValue("tempPath");
034            tempPathFile = new File(tempPath);
035            if (!tempPathFile.exists()) {
036                tempPathFile.mkdirs();
037            }
038      }
039     /**
040      * 上传文件
041      * @param request
042      * @return true 上传成功 false上传失败
043      */
044     @SuppressWarnings("unchecked")
045     public static boolean upload(HttpServletRequest request){
046         boolean flag = true;
047         //检查输入请求是否为multipart表单数据。
048         boolean isMultipart = ServletFileUpload.isMultipartContent(request);
049         //若果是的话
050         if(isMultipart){
051             /**为该请求创建一个DiskFileItemFactory对象,通过它来解析请求。执行解析后,所有的表单项目都保存在一个List中。**/
052             try {
053                 DiskFileItemFactory factory = new DiskFileItemFactory();
054                 factory.setSizeThreshold(sizeThreshold); // 设置缓冲区大小,这里是4kb
055                 factory.setRepository(tempPathFile);// 设置缓冲区目录
056                 ServletFileUpload upload = new ServletFileUpload(factory);
057                 upload.setHeaderEncoding("UTF-8");//解决文件乱码问题
058                 upload.setSizeMax(sizeMax);// 设置最大文件尺寸
059                 List<FileItem> items = upload.parseRequest(request);
060                 // 检查是否符合上传的类型
061                 if(!checkFileType(items)) return false;
062                 Iterator<FileItem> itr = items.iterator();//所有的表单项
063                 //保存文件
064                 while (itr.hasNext()){
065                      FileItem item = (FileItem) itr.next();//循环获得每个表单项
066                      if (!item.isFormField()){//如果是文件类型
067                              String name = item.getName();//获得文件名 包括路径啊
068                              if(name!=null){
069                                  File fullFile=new File(item.getName());
070                                  File savedFile=newFile(uploadPath,fullFile.getName());
071                                  item.write(savedFile);
072                              }
073                      }
074                 }
075             catch (FileUploadException e) {
076                 flag = false;
077                 e.printStackTrace();
078             }catch (Exception e) {
079                 flag = false;
080                 e.printStackTrace();
081             }
082         }else{
083             flag = false;
084             System.out.println("the enctype must be multipart/form-data");
085         }
086         return flag;
087     }
088      
089     /**
090      * 删除一组文件
091      * @param filePath 文件路径数组
092      */
093     public static void deleteFile(String [] filePath){
094         if(filePath!=null && filePath.length>0){
095             for(String path:filePath){
096                 String realPath = uploadPath+path;
097                 File delfile = new File(realPath);
098                 if(delfile.exists()){
099                     delfile.delete();
100                 }
101             }
102              
103         }
104     }
105      
106     /**
107      * 删除单个文件
108      * @param filePath 单个文件路径
109      */
110     public static void deleteFile(String filePath){
111         if(filePath!=null && !"".equals(filePath)){
112             String [] path = new String []{filePath};
113             deleteFile(path);
114         }
115     }
116      
117     /**
118      * 判断上传文件类型
119      * @param items
120      * @return
121      */
122     private static Boolean checkFileType(List<FileItem> items){
123         Iterator<FileItem> itr = items.iterator();//所有的表单项
124         while (itr.hasNext()){
125              FileItem item = (FileItem) itr.next();//循环获得每个表单项
126              if (!item.isFormField()){//如果是文件类型
127                      String name = item.getName();//获得文件名 包括路径啊
128                      if(name!=null){
129                          File fullFile=new File(item.getName());
130                          boolean isType = ReadUploadFileType.readUploadFileType(fullFile);
131                          if(!isType) return false;
132                          break;
133                      }
134              }
135         }
136          
137         return true;
138     }
139 }

4、FileUploadServlet上传文件servlet 供外部调用

 

 

01 package com.file.servlet;
02  
03 import java.io.IOException;
04  
05 import javax.servlet.ServletException;
06 import javax.servlet.http.HttpServlet;
07 import javax.servlet.http.HttpServletRequest;
08 import javax.servlet.http.HttpServletResponse;
09  
10 import com.file.upload.FileUpload;
11  
12  
13 @SuppressWarnings("serial")
14 public class FileUploadServlet extends HttpServlet {
15      
16     public void doGet(HttpServletRequest request, HttpServletResponse response)
17             throws ServletException, IOException {
18         this.doPost(request, response);
19     }
20  
21      
22     public void doPost(HttpServletRequest request, HttpServletResponse response)
23             throws ServletException, IOException {
24         FileUpload.upload(request);
25     }
26  
27 }

5、DeleteFileServlet删除图片供外部调用

 

 

01 package com.file.servlet;
02  
03 import java.io.IOException;
04  
05 import javax.servlet.ServletException;
06 import javax.servlet.http.HttpServlet;
07 import javax.servlet.http.HttpServletRequest;
08 import javax.servlet.http.HttpServletResponse;
09  
10 import com.file.upload.FileUpload;
11  
12 @SuppressWarnings("serial")
13 public class DeleteFileServlet extends HttpServlet {
14     public void doGet(HttpServletRequest request, HttpServletResponse response)
15             throws ServletException, IOException {
16         this.doPost(request, response);
17     }
18  
19     public void doPost(HttpServletRequest request, HttpServletResponse response)
20             throws ServletException, IOException {
21         String [] file = request.getParameterValues("fileName");
22         FileUpload.deleteFile(file);
23     }
24  
25 }

6、allow_upload_file_type.properties

 

gif=image/gif
jpg=mage/jpg,image/jpeg,image/pjpeg
png=image/png,image/x-pngimage/x-png,image/x-png
bmp=image/bmp

7、uploadConst.properties

sizeThreshold=4096
tempPath=c\:\\temp\\buffer\\
sizeMax=4194304
uploadPath=c\:\\upload\\
8外部调用

index.jsp

 

01 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
02 <%
03 String path = request.getContextPath();
04 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
05 %>
06  
07 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
08 <html>
09   <head>
10     <base href="<%=basePath%>">
11      
12     <title>My JSP 'index.jsp' starting page</title>
13     <meta http-equiv="pragma" content="no-cache">
14     <meta http-equiv="cache-control" content="no-cache">
15     <meta http-equiv="expires" content="0">   
16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
17     <meta http-equiv="description" content="This is my page">
18     <!--
19     <link rel="stylesheet" type="text/css" href="styles.css">
20     -->
21   </head>
22    
23   <body>
24      <form name="myform" action="http://xxx.com/FileUploadServlet" method="post"enctype="multipart/form-data">
25        File:
26        <input type="file" name="myfile"><br>
27        <br>
28        <input type="submit" name="submit" value="Commit">
29     </form>
30   </body>
31 </html>

转自:http://blog.csdn.net/ajun_studio/article/details/6639306

分享到:
评论

相关推荐

    利用Common-fileupload封装的文件上传组件...附上源码.

    首先,我们来看一下标题:“利用Common-fileupload封装的文件上传组件...附上源码”。这表明我们将讨论如何使用这个库来创建一个文件上传系统,并且提供有源码可供参考。通过`Common-fileupload`,我们可以实现用户...

    最全的common-FileUpload.jar包

    在Java开发中,上传文件是一项常见的任务,Apache Commons FileUpload库正是为此而设计的。这个"最全的common-FileUpload.jar包"包含了处理HTTP请求中的多部分数据,特别是文件上传的功能。它使得开发者能够方便地从...

    java 图片上传系统 common-fileUpload

    Java 图片上传系统基于 `common-fileUpload` 模块实现,这是一个常见的用于处理文件上传的Java库。在Java Web开发中,文件上传功能是必不可少的一部分,尤其在涉及到用户提交图片时。`common-fileUpload` 是Apache ...

    commons-fileupload-1.3.3&commons-fileupload-1.3.3架包和代码.rar

    综上所述,这些组件的结合使用,可以构建一个健壮的、能够处理文件上传以及与数据库交互的Java Web应用,是Java开发中常见的技术栈配置。开发者在实际项目中,可以通过这些工具来提升应用的稳定性和效率。

    common-io,common-fileupload.jar等jar包

    在Java开发中,`common...总之,`common-io`和`common-fileupload`是Java开发中的强大工具,它们简化了常见的I/O操作和文件上传处理,提高了开发效率。了解并熟练运用这些库,能帮助开发者更好地应对实际项目中的挑战。

    Common-FileUpload带进度条文件上传

    3. Common-FileUpload库:这个库可能是一个专门为实现带进度条文件上传功能而设计的开源组件。它可能包含JavaScript、CSS和HTML代码,用于构建用户界面,以及后端处理逻辑。使用此类库可以简化开发者的工作,避免从...

    java+servlet+commons-io-2.4.jar+commons-fileupload-1.3.jar实现文件的上传与下载

    本教程将深入讲解如何使用Java Servlet、Apache Commons IO库(版本2.4)以及Apache Commons FileUpload库(版本1.3)来实现这一功能。 一、Apache Commons IO与FileUpload库介绍 Apache Commons IO是一个Java库,...

    Common-fileupload组件实现文件上传.pdf

    通过使用Common-fileupload组件,开发者可以轻松地在JSP环境中实现文件上传功能。该组件不仅提供了基本的文件上传功能,还支持高级特性如多文件上传、文件大小限制等。这对于提高Web应用程序的功能性和用户体验非常...

    common-fileupload

    在Java Web开发中,文件的上传和下载是常见的功能需求,`commons-fileupload`组件是Apache Commons项目的一个子项目,专门用于处理HTTP请求中的多部分数据,即表单文件上传。这个组件使得开发者能够轻松地在Servlet...

    利用commons-fileupload组件实现文件上传-实例

    通过以上步骤,我们就使用Apache Commons FileUpload组件实现了一个基本的文件上传功能。你可以根据自己的需求对这个示例进行扩展,比如添加错误处理、文件类型检查和存储优化等。参考提供的博文链接,可以获取更多...

    commons-fileupload文件上传组件中文教程--张孝祥写的

    Apache Commons FileUpload 是一款非常实用且功能强大的文件上传组件,广泛应用于Java Web项目中。它极大地简化了原本复杂繁琐的文件上传过程,使得开发者能够更加专注于业务逻辑的实现。本文档旨在通过详细解读...

    自己在用的 common-FileUpload.jar

    标题 "common-FileUpload.jar" 指向的是一个用于处理文件上传功能的Java库,具体来说是Apache Commons FileUpload组件的实现。这个组件广泛应用于Web应用开发中,特别是那些需要用户上传文件的场景,如图片上传、...

    使用commons-fileupload上传文件

    【使用commons-fileupload上传文件】 Apache Commons FileUpload是Apache组织的一个子项目,专注于处理HTTP文件上传。这个组件提供了一个简洁的API,使得开发者能够轻松地在Java应用中处理由浏览器发送的多部分...

    common-fileupload&amp;common-io

    "common-fileupload"和"common-io"是Apache Commons项目中的两个重要组件,它们为处理文件上传和输入/输出提供了强大的支持。接下来,我们将详细讨论这两个库的功能、使用方法及其在JSP应用中的重要性。 Apache ...

    commons-fileupload-1.2.2 common-io-2.0.1

    例如,你可以用Commons FileUpload来处理文件上传请求,然后使用Commons IO来操作上传后的文件,最后通过Commons BeanUtils来处理和验证上传文件的相关属性信息。这些库的结合使用,大大提升了开发效率,减少了代码...

    commons-fileupload-1.2.jar和commons-io-1.3.2.jar

    新建一个servlet: FileUpload.java用于文件上传: package com.drp.util.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet....

    JAX-RS-FileUpload-Jersey-Example

    在本文中,我们将深入探讨如何使用Java API for RESTful Web Services (JAX-RS) 和 Jersey 实现文件上传功能。标题“JAX-RS-FileUpload-Jersey-Example”暗示了我们将集中讨论如何利用这两个强大的工具来创建一个...

    JSP组件commons-fileupload实现文件上传

    本文实例为大家分享了JSP使用commons-fileupload实现文件上传代码,供大家参考,具体内容如下 1、准备: 将commons-fileupload-1.1.zip和commons-io-1.1.zip复制到”\WEB-INF\lib”目录下 2、首先是Servlet:...

    commons-fileupload-1.3.2-src 源码

    10. **与其他Apache Commons库的集成**:Apache Commons FileUpload经常与另一个Apache Commons组件——Commons IO一起使用,共同处理文件I/O操作,例如读取和写入文件。 通过分析"commons-fileupload-1.3.2-src...

Global site tag (gtag.js) - Google Analytics