最近在做drp项目,其中有一个功能是实现文件的文件的上传!以前在想ITOO项目的时候,也做过这种功能,不过那个是.net的,虽说思想是一样的,但是用的技术还是有很多的不一样的!还想写一下!
因为以前没有用过java的上传,所以也不知道用什么来做,最后从网上找了一下,有很多的上传,最后确定用Apache common fileUpload
来实现!本文采用的jsp+servlet
来实现的上传,并将文件存储到服务器端!
看一下项目的布局,可以看到要引用两个文件,commons-fileupload-1.3.1.jar 和commons-io-1.3.2.jar ,这两个文件 直接去官网就可以下载,很好找到!
我们先来看一下FileUpload.jsp的页面代码!一定要注意form的提交方式为post
提交,编码类型为enctype="multipart/form-data"编码格式。 本例子是实现的图片的上传,所以对图片的格式进行了验证,其他文件类型的上传同样的验证方式就可以,不过要改一下文件后缀名!
<span style="font-size:18px;"><%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>Insert title here</title> <script type="text/javascript"> //指定允许的上传文件类型 var extArray = new Array(".jpg",".png",".jpeg",".gif"); var allowFormSubmit=false; //有哪些限制 function LimitAttach(form, file){ var allowSubmit = false; if (!file){ alert("请先选择文件,然后在上传!"); return; } while (file.indexOf("\\") != -1){ file = file.slice(file.indexOf("\\") + 1); } var ext = file.slice(file.indexOf(".")).toLowerCase(); for (var i = 0; i < extArray.length; i++) { if (extArray[i] == ext){ allowSubmit = true; break; } } if (allowSubmit){ //符合条件, 发给指定的servlet form.submit(); form.method="post"; form.action="servlet/UploadHandleServlet"; }else{ //检测上传文件类型 alert("只能上传以下格式的文件:"+ (extArray.join("")) + "\n请重新选择再上传."); } } </script> </head> <body> <form name="upform" target="_self" id="uploadForm" enctype="multipart/form-data"> <input name="uploadfile" size="40" type="file" > <input name="upload" type="submit" onclick="LimitAttach(this.form,this.form.uploadfile.value)" value="上传"/> </form> </body> </html> </span>
而在servlet 端 的工作过程是1. 创建一个文件的解析对象, 然后对上传文件的大小做一个限制, 获取上传文件, 将文件存储服务器的文件夹中! 下边看一下servlet的代码, servlet的使用要在配置文件中进行配置!具体如何配置 就参见百度! 这里不再介绍!
<span style="font-size:18px;">package com.tgb.test.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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadHandleServlet extends HttpServlet { private File uploadPath; private File tempPath; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1 创建文件解析对象 DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(4096); factory.setRepository(tempPath); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(1000000 * 20); try { //获取上传文件 List fileItems = upload.parseRequest(request); String itemNo = ""; for (Iterator iter = fileItems.iterator(); iter.hasNext();) { FileItem item = (FileItem) iter.next(); //是普通的表单输入域 if(item.isFormField()) { if ("itemNo".equals(item.getFieldName())) { itemNo = item.getString(); } } //是否为input="type"输入域 if (!item.isFormField()) { String fileName = item.getName(); long size = item.getSize(); if ((fileName == null || fileName.equals("")) && size == 0) { continue; } //截取字符串 如:C:\WINDOWS\Debug\PASSWD.LOG fileName = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); //将文件存入指定的文件 item.write(new File(uploadPath, fileName)); } } response.sendRedirect(request.getContextPath() + "/index.jsp?flag='成功!'"); } catch (Exception e) { e.printStackTrace(); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void init() throws ServletException { //itemManager= new ItemManagerImpl(); uploadPath = new File(getServletContext().getRealPath("upload")); System.out.println("uploadPath=====" + uploadPath); //如果目录不存在 if (!uploadPath.exists()) { //创建目录 uploadPath.mkdir(); } //临时目录 tempPath = new File(getServletContext().getRealPath("temp")); if (!tempPath.exists()) { tempPath.mkdir(); } } } </span>
这样一个简单的文件的上传功能就完成了。我们还可以同事上传多个文件,如果使用spring mvc ,他还自己封装了更简单的实现方法! 可以查看一下其他的博客! 文件上传其实都是一样的实现思路! 没有什么新意!
时间: 2024-10-18 20:03:21