1 package image;
  2 
  3 
  4 import java.io.File;
  5 import java.io.IOException;
  6 import java.io.PrintWriter;
  7 import java.util.List;
  8 import java.util.UUID;
  9 
 10 import javax.servlet.ServletConfig;
 11 import javax.servlet.ServletContext;
 12 import javax.servlet.ServletException;
 13 import javax.servlet.http.HttpServlet;
 14 import javax.servlet.http.HttpServletRequest;
 15 import javax.servlet.http.HttpServletResponse;
 16 
 17 import org.apache.commons.fileupload.FileItem;
 18 import org.apache.commons.fileupload.FileUploadException;
 19 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 20 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 21 
 22 
 23 /**
 24  * 文件上传
 25  * @author Administrator
 26  *
 27  */
 28 public class ImageAction extends HttpServlet {
 29     
 30       private static final long serialVersionUID = 1L;  
 31       
 32         // 保存文件的目录
 33         private static String PATH_FOLDER1 = "/";
 34         private static String PATH_FOLDER2 = "/";
 35         // 存放临时文件的目录
 36         private static String TEMP_FOLDER = "/";
 37         
 38         
 39         @Override
 40         public void init(ServletConfig config) throws ServletException {
 41             ServletContext servletCtx = config.getServletContext();
 42             // 初始化路径
 43             // 保存文件的目录
 44             PATH_FOLDER1 = servletCtx.getRealPath("/audioUpload");
 45             PATH_FOLDER2 = servletCtx.getRealPath("/imageUpload");
 46             // 存放临时文件的目录,存放xxx.tmp文件的目录
 47             TEMP_FOLDER = servletCtx.getRealPath("/uploadTemp");
 48         }
 49 
 50         /**
 51          * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
 52          *      response)
 53          */
 54         protected void doGet(HttpServletRequest request,
 55                 HttpServletResponse response) throws ServletException, IOException {
 56             request.setCharacterEncoding("utf-8"); // 设置编码
 57             response.setCharacterEncoding("utf-8");
 58             response.setContentType("text/html;charset=UTF-8");
 59             String method = request.getParameter("method");
 60             if (method == null) {
 61                 method = "image";
 62             }
 63 
 64             if ("image".equals(method)) {
 65                 image(request, response);
 66             } else if ("audio".equals(method)) {
 67                 audio(request, response);
 68             }
 69         }
 70         private void image(HttpServletRequest request,
 71                 HttpServletResponse response) {
 72             // 获得磁盘文件条目工厂
 73             DiskFileItemFactory factory = new DiskFileItemFactory();
 74             
 75             // 如果没以下两行设置的话,上传大的 文件 会占用 很多内存,
 76             // 设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同
 77             /**
 78              * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem
 79              * 格式的 然后再将其真正写到 对应目录的硬盘上
 80              */
 81             factory.setRepository(new File(TEMP_FOLDER));
 82             // 设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室
 83             factory.setSizeThreshold(1024 * 1024);
 84 
 85             // 高水平的API文件上传处理
 86             ServletFileUpload upload = new ServletFileUpload(factory);
 87             
 88             try {
 89                 // 提交上来的信息都在这个list里面
 90                 // 这意味着可以上传多个文件
 91                 // 请自行组织代码
 92                 List<FileItem> list = upload.parseRequest(request);
 93                 // 获取上传的文件
 94                 FileItem item = getUploadFileItem(list);
 95                 // 获取文件名
 96                 String filename = getUploadFileName1(item);
 97                 
 98 //                System.out.println("存放目录:" + PATH_FOLDER);
 99 //                System.out.println("文件名:" + filename);
100                 // 真正写到磁盘上
101                 item.write(new File(PATH_FOLDER2, filename)); // 第三方提供的
102                 
103                 PrintWriter writer = response.getWriter();
104                 
105                 writer.print("{");
106 //                writer.print("msg:\"文件大小:"+item.getSize()+",文件名:"+filename+"\"");
107                 writer.print("msg:\""+filename+"\"");
108                 writer.print("}");
109                 
110                 writer.close();
111             
112             } catch (FileUploadException e) {
113                 e.printStackTrace();
114             } catch (Exception e) {
115                 e.printStackTrace();
116             }
117             
118             
119         }
120         private void audio(HttpServletRequest request,
121                 HttpServletResponse response) {
122             // 获得磁盘文件条目工厂
123             DiskFileItemFactory factory = new DiskFileItemFactory();
124             
125             // 如果没以下两行设置的话,上传大的 文件 会占用 很多内存,
126             // 设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同
127             /**
128              * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem
129              * 格式的 然后再将其真正写到 对应目录的硬盘上
130              */
131             factory.setRepository(new File(TEMP_FOLDER));
132             // 设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室
133             factory.setSizeThreshold(1024 * 1024);
134 
135             // 高水平的API文件上传处理
136             ServletFileUpload upload = new ServletFileUpload(factory);
137             
138             try {
139                 // 提交上来的信息都在这个list里面
140                 // 这意味着可以上传多个文件
141                 // 请自行组织代码
142                 List<FileItem> list = upload.parseRequest(request);
143                 // 获取上传的文件
144                 FileItem item = getUploadFileItem(list);
145                 // 获取文件名
146                 String filename = getUploadFileName2(item);
147                 filename=filename+".wav";
148 //                System.out.println("存放目录:" + PATH_FOLDER);
149 //                System.out.println("文件名:" + filename);
150                 // 真正写到磁盘上
151                 item.write(new File(PATH_FOLDER1, filename)); // 第三方提供的
152                 
153                 PrintWriter writer = response.getWriter();
154                 
155 //                writer.print("{");
156 //                writer.print("msg:\"文件大小:"+item.getSize()+",文件名:"+filename+"\"");
157                 writer.print(filename);
158 //                writer.print("}");
159                 
160                 writer.close();
161             
162             } catch (FileUploadException e) {
163                 e.printStackTrace();
164             } catch (Exception e) {
165                 e.printStackTrace();
166             }
167             
168             
169         }
170         private FileItem getUploadFileItem(List<FileItem> list) {
171             for (FileItem fileItem : list) {
172                 if(!fileItem.isFormField()) {
173                     return fileItem;
174                 }
175             }
176             return null;
177         }
178         private String getUploadFileName1(FileItem item) {
179             // 获取路径名
180             String value = item.getName();
181             // 索引到最后一个反斜杠
182             int start = value.lastIndexOf("/");
183             // 截取 上传文件的 字符串名字,加1是 去掉反斜杠,
184             String name =UUID.randomUUID().toString().trim().replaceAll("-", "");
185             int sub = value.lastIndexOf(".");
186             String filename = value.substring(value.length()-sub,value.length());
187             
188             return name+filename;
189         }
190         private String getUploadFileName2(FileItem item) {
191             // 获取路径名
192             String value = item.getName();
193             // 索引到最后一个反斜杠
194             int start = value.lastIndexOf("/");
195             // 截取 上传文件的 字符串名字,加1是 去掉反斜杠,
196             String name =UUID.randomUUID().toString().trim().replaceAll("-", "");
197             String filename = value.substring(value.length()-4,value.length());
198             
199             return name+filename;
200         }
201         
202 
203         /**
204          * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
205          *      response)
206          */
207         protected void doPost(HttpServletRequest request,
208                 HttpServletResponse response) throws ServletException, IOException {
209             this.doGet(request, response);
210         }  
211 
212 
213 }

更多相关文章

  1. java基础IO删除文件夹文件
  2. java动态加载jar文件
  3. IT兄弟连 JavaWeb教程 文件上传技术
  4. JAVA 实现tail -f 日志文件监控功能
  5. 读取Excel文件并跳过空行但不是空列

随机推荐

  1. ELIPS Studio 3 Beta 6支持iPhone和Andro
  2. android SDK安装出现Failed to fetch URL
  3. 【Android(安卓)界面效果34】Android里Se
  4. Android获得手机所有应用(非系统)、正在运
  5. Android源码学习--SystemServer进程
  6. Android(安卓)Handler机制之Handler 、Me
  7. Android各种访问权限Permission详解
  8. Android 开发工程师面试指南
  9. Android Market上发软件要注意哪些问题
  10. Android经典完美退出方法