运行效果如下:
文件上传成功之后,上传的文件保存在了WEB-INF目录下的upload目录,如下图所示:

2.3、文件上传的细节
上述的代码虽然可以成功将文件上传到服务器上面的指定目录当中,但是文件上传功能有许多需要注意的小细节问题,以下列出的几点需要特别注意的
1、为保证服务器安全,上传文件应该放在外界无法直接访问的目录下,比如放于WEB-INF目录下。
2、为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名。
3、为防止一个目录下面出现太多文件,要使用hash算法打散存储。
4、要限制上传文件的最大。
5、要限制上传文件的类型,在收到上传文件名时,判断后缀名是否合法。
针对上述提出的5点细节问题,我们来改进一下UploadHandleServlet,改进后的代码如下:
1 package me.gacl.web.controller; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.util.List; 8 import java.util.UUID; 9 10 import javax.servlet.ServletException; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 import org.apache.commons.fileupload.FileItem; 15 import org.apache.commons.fileupload.FileUploadBase; 16 import org.apache.commons.fileupload.ProgressListener; 17 import org.apache.commons.fileupload.disk.DiskFileItemFactory; 18 import org.apache.commons.fileupload.servlet.ServletFileUpload; 19 20 /** 21 * @ClassName: UploadHandleServlet 22 * @Description: TODO(这里用一句话描述这个类的作用) 23 * @author: 孤傲苍狼 24 * @date: 2015-1-3 下午11:35:50 25 * 26 */ 27 public class UploadHandleServlet extends HttpServlet { 28 29public void doGet(HttpServletRequest request, HttpServletResponse response) 30throws ServletException, IOException { 31//得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全 32String savePath = this.getServletContext().getRealPath("/WEB-INF/upload"); 33//上传时生成的临时文件保存目录 34String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp"); 35File tmpFile = new File(tempPath); 36if (!tmpFile.exists()) { 37//创建临时目录 38tmpFile.mkdir(); 39} 4041//消息提示 42String message = ""; 43try{ 44//使用Apache文件上传组件处理文件上传步骤: 45//1、创建一个DiskFileItemFactory工厂 46DiskFileItemFactory factory = new DiskFileItemFactory(); 47//设置工厂的缓冲区的大小,当上传的文件大小超过缓冲区的大小时,就会生成一个临时文件存放到指定的临时目录当中。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-52904-4.html
你Y的
是出于对它的信任
巴菲特不是人吗