鱼跃于渊

First know how, Second know why !
posts - 0, comments - 1, trackbacks - 0, articles - 49

fileupload文件上传简单实例

Posted on 2008-09-15 21:49 鱼跃于渊 阅读(233) 评论(0)  编辑  收藏
[l转载]http://www.zhuaxia.com/item/862476716


1. 首先需要下载需要的组件。

下载commons-fileupload-1.2.1-bin.zip,下载网址:

http://commons.apache.org/downloads/download_fileupload.cgi 

      下载commons-io-1.4-bin.zip,下载网址: 
        http://commons.apache.org/downloads/download_io.cgi 

    

2. 用开源的FileUpload组件,可以很方便的给自己的系统添加功能强大的文件上传模块。下图为文件上传的基本流程图。

 

文件上传流程图

3. 将commons-fileupload-1.2.1-bin.zip包中的commons-fileupload-1.2.1.jar文件和commons-io-1.4-bin.zip包中的commons-io-1.4.jar文件拷贝到web工程下的WEB-INF\lib目录下。

4. 在服务器端创建处理文件上传的Servlet类。源代码如下:

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
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.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public FileUploadServlet() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
final long MAX_SIZE = 300 * 1024 * 1024;// 设置上传文件最大值
// 允许上传的文件格式的列表
final String[] allowedExt = new String[] {"jpg", "jpeg", "gif", "txt",
"doc","mp3", "wma", "m4a","rar","zip" };
response.setContentType("text/html");
// 设置字符编码为UTF-8, 统一编码,处理出现乱码问题
response.setCharacterEncoding("UTF-8");
// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
DiskFileItemFactory dfif = new DiskFileItemFactory();
dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘
dfif.setRepository(new File(request.getRealPath("/")
+ "ImagesUploadTemp"));// 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录
// 用以上工厂实例化上传组件
ServletFileUpload sfu = new ServletFileUpload(dfif);
// 设置最大上传大小
sfu.setSizeMax(MAX_SIZE);
PrintWriter out = response.getWriter();
// 从request得到所有上传域的列表
List fileList = null;
try {
fileList = sfu.parseRequest(request);
} catch (FileUploadException e) {// 处理文件尺寸过大异常
if (e instanceof SizeLimitExceededException) {
out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节

"); out .println("返回"); return; } e.printStackTrace(); } // 没有文件上传 if (fileList == null || fileList.size() == 0) { out.println("请选择上传文件

"); out.println("返回"); return; } // 得到所有上传的文件 Iterator fileItr = fileList.iterator(); // 循环处理所有文件 while (fileItr.hasNext()) { FileItem fileItem = null; String path = null; long size = 0; // 得到当前文件 fileItem = (FileItem) fileItr.next(); // 忽略简单form字段而不是上传域的文件域(等) if (fileItem == null || fileItem.isFormField()) { continue; } // 得到文件的完整路径 path = fileItem.getName(); // 得到文件的大小 size = fileItem.getSize(); if ("".equals(path) || size == 0) { out.println("请选择上传文件

"); out .println("返回"); return; } // 得到去除路径的文件名 String t_name = path.substring(path.lastIndexOf("\\") + 1); // 得到文件的扩展名(无扩展名时将得到全名) String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1); // 拒绝接受规定文件格式之外的文件类型 int allowFlag = 0; int allowedExtCount = allowedExt.length; for (; allowFlag < allowedExtCount; allowFlag++) { if (allowedExt[allowFlag].equals(t_ext)) break; } if (allowFlag == allowedExtCount) { out.println("请上传以下类型的文件

"); for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++) out.println("*." + allowedExt[allowFlag] + "   "); out .println("

返回"); return; } long now = System.currentTimeMillis(); // 根据系统时间生成上传后保存的文件名 String prefix = String.valueOf(now); // 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下 // String u_name = request.getRealPath("/") + "ImagesUploaded/" // + prefix + "." + t_ext; String filename = prefix + "." + t_ext; try { // 保存文件到C:\\upload目录下 fileItem.write(new File("C:\\upload\\"+filename)); System.out.println(filename); out.println("文件上传成功. 已保存为: " + prefix + "." + t_ext + "   文件大小: " + size + "字节

"); out .println("继续上传"); } catch (Exception e) { e.printStackTrace(); } } } }

 5. 在客户端创建上传文件页面


    
        "Content-Type" content="text/html; charset=UTF-8">
        
        
              


 


只有注册用户登录后才能发表评论。


网站导航: