Java文件上传类FileUploadUtil.java代码+注释
Java中实现文件上传下载的三种解决方案(推荐)

Java中实现⽂件上传下载的三种解决⽅案(推荐)java⽂件上传与⽂件下载是程序开发中⽐较常见的功能,下⾯通过本⽂给⼤家介绍Java中实现⽂件上传下载的三种解决⽅案,具体详情如下所⽰;第⼀点:Java代码实现⽂件上传FormFile file=manform.getFile();String newfileName = null;String newpathname=null;String fileAddre="/numUp";try {InputStream stream = file.getInputStream();// 把⽂件读⼊String filePath = request.getRealPath(fileAddre);//取系统当前路径File file1 = new File(filePath);//添加了⾃动创建⽬录的功能((File) file1).mkdir();newfileName = System.currentTimeMillis()+ file.getFileName().substring(file.getFileName().lastIndexOf('.'));ByteArrayOutputStream baos = new ByteArrayOutputStream();OutputStream bos = new FileOutputStream(filePath + "/"+ newfileName);newpathname=filePath+"/"+newfileName;System.out.println(newpathname);// 建⽴⼀个上传⽂件的输出流System.out.println(filePath+"/"+file.getFileName());int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {bos.write(buffer, 0, bytesRead);// 将⽂件写⼊服务器}bos.close();stream.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}第⼆点:Jsp页⾯上实现⽂件上传package com.vogoal.util;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.Hashtable;import javax.servlet.ServletInputStream;import javax.servlet.http.HttpServletRequest;public class JspFileUpload {/** request对象 */private HttpServletRequest request = null;/** 上传⽂件的路径 */private String uploadPath = null;/** 每次读取得字节的⼤⼩ */private static int BUFSIZE = 1024 * 8;/** 存储参数的Hashtable */private Hashtable paramHt = new Hasptable();/** 存储上传的⽂件的⽂件名的ArrayList */private ArrayList updFileArr = new ArrayList();/*** 设定request对象。
java传输文件 方案

Java传输文件方案1. 简介在开发Java应用程序时,经常需要通过网络传输文件。
本文将介绍几种常见的Java传输文件的方案,包括使用原生Java API实现文件传输、使用FTP协议传输文件以及使用HTTP协议传输文件。
2. 使用原生Java API实现文件传输Java提供了一系列的API来处理文件传输操作。
下面将介绍如何使用原生Java API实现文件传输。
2.1 文件上传在Java中,可以使用java.io包提供的类来实现文件上传。
以下是一个简单的文件上传示例:import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import .Socket;public class FileUploader {public static void uploadFile(File file, String host, int port) thr ows IOException {try (Socket socket = new Socket(host, port);FileInputStream fileInputStream = new FileInputStream(fil e);OutputStream outputStream = socket.getOutputStream()) { byte[] buffer = new byte[4096];int bytesRead;while ((bytesRead = fileInputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);}}}}在上述示例中,我们使用Socket类实现了与服务器建立连接,并使用FileInputStream读取文件内容,并通过OutputStream将文件内容写入到服务器。
JavaWeb实现文件上传功能详解

JavaWeb实现⽂件上传功能详解⽂件上传功能的实现在⼤多数⽹站中,我们都可以看见⽂件上传和下载功能的实现,今天我们就⽂件上传做⼀个详细的总结实现步骤:1、新建⼀个JSP页⾯:表单必须设置:enctype="multipart/form-data"参数 upload.jsp:<form action="" method="post" enctype="multipart/form-data"><!--accept=".txt"标签⽤来确定上传的⽂件默认类型-->请选择您要上传的⽂件:<input type="file" name="fileName" accept=".txt" /> <br/>确认上传?<input type="submit" value="确认" /><input type="reset" value="重选" /></form>2、编写后端功能Servlet代码:UploadFile.java:具体实现思路:--------1、设置编码⽅式为utf-8,获取字符流--------2、创建DiskFileItemFactory⼯⼚类对象,将⽂件封装成单独的FileItem对象--------3、设置⽂件缓存⽬录--------4、加载⽂件缓存⽬录,创建ServletFileUpload对象--------5、设置⽂件编码为utf-8--------6、解析request请求,得到上传⽂件的FileItem对象,得到的也就是所有的表单name--------7、遍历表单name集合,判断哪⼀些是普通字段和⽂件字段,进⾏区分--------8、得到所上传的⽂件路径名--------9、截取⽂件名--------10、设置上传的⽬标⽂件夹路径--------11、通过字节流进⾏⽂件的对拷protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1、设置编码⽅式为utf-8,获取字符流request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");PrintWriter write = response.getWriter();//2、创建DiskFileItemFactory⼯⼚类对象,将⽂件封装成单独的FileItem对象DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();//3、设置⽂件缓存⽬录File file = new File("C:\\Cache");if(!file.exists()) {//如果⽂件不存在,就创建⼀个⽂件file.mkdirs();}diskFileItemFactory.setRepository(file); //加载⽂件缓存⽬录//4、创建ServletFileUpload对象ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);//5、设置⽂件编码为utf-8fileUpload.setHeaderEncoding("utf-8");//6、解析request请求,得到上传⽂件的FileItem对象,得到的也就是所有的表单name --->⽐如:这⾥只有⼀个name="fileName" 拿到的就是这个集合 List<FileItem> fileItems = null;try {fileItems = fileUpload.parseRequest(request);} catch (FileUploadException e) {e.printStackTrace();}//8、遍历集合for(FileItem fileItem:fileItems) { //⽂本域//判断是否为普通字段if(fileItem.isFormField()) {//得到字段名、字段值String name = fileItem.getFieldName(); //}//为⽂件域else {//9、得到所上传的⽂件路径名String fileName = fileItem.getName();//10、截取⽂件名String fiString = fileName.substring(stIndexOf("\\")+1);//11、设置上传的⽬标⽂件夹路径File filedir = new File("C:\\NewFile");if(!filedir.exists()) {filedir.mkdir();}// System.out.println(user.getUserName());File filepath = new File(filedir+"\\"+fiString);// System.out.println(fiString);if(!filepath.exists()) {filepath.createNewFile();}//获得⽂件上传流InputStream in = fileItem.getInputStream();//使⽤FileOutStream打开服务器端的上传⽂件FileOutputStream out = new FileOutputStream(filepath);//流的对拷byte[] bb = new byte[1024];int len ;while((len= in.read(bb))>0) {out.write(bb, 0, len);// out.close();// in.close();fileItem.delete(); //删除临时⽂件}write.println("⽂件上传成功<br/>");}}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
java实现文件上传功能

java实现⽂件上传功能本⽂实例为⼤家分享了java实现⽂件上传的具体代码,供⼤家参考,具体内容如下⼀、⽂件上传准备⼯作对于⽂件上传,浏览器在上传的过程中将⽂件以流的形式提交到服务器。
可以选择apache的commons-fileupload包作为⽂件上传组件,commons-fileupload包依赖于commons-io包。
可以在Maven导⼊该commons-fileupload包,Maven会帮我们导⼊依赖的jar包commons-io。
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency>⼆、⽂件上传的主要步骤创建diskFileItemFactory对象,处理⽂件上传路径或者⼤⼩限制通过diskFileItemFactory对象作为ServletFileUpload类的参数,创建ServletFileUpload对象处理上传的⽂件三、代码实现在⽂件上传时,表单⼀定要加enctype=“multipart/form-data” 。
只有使⽤enctype=“multipart/form-data”,表单才会把⽂件的内容编码到HTML请求中。
默认enctype=“application/x-www-form-urlencoded”,表单的内容会按URL规则编码。
⽽enctype="multipart/form-data"不对字符编码。
在使⽤包含⽂件上传控件的表单时,必须使⽤该值。
method也⼀定要使⽤post请求。
<form action="/file.do" enctype="multipart/form-data" method="post"><p>上传⽤户:<input type="text" name="username"></p><p><input type="file" name="file1"></p><p><input type="file" name="file2"></p><p><input type="submit">|<input type="reset"></p></form>protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//判断上传的是普通表单还是带⽂件的表单if (!ServletFileUpload.isMultipartContent(req)) {return;}//创建上传⽂件保存的地址,⼀般创建在WEB-INF⽬录下,⽤户⽆法直接访问该⽬录下的⽂件String uploadPath = this.getServletContext().getRealPath("/WEB-INF/upload");File uploadFile = new File(uploadPath);//如果⽂件夹不存在,则创建⼀个if (!uploadFile.exists()) {uploadFile.mkdir();}//创建上传⼤⽂件的临时地址,⼀般⼏天后⾃动删除,⽤户可以⼿动删除或者转为永久⽂件// ⼀般创建在WEB-INF⽬录下,⽤户⽆法直接访问该⽬录下的⽂件String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");File tempFile = new File(tempPath);//如果⽂件夹不存在,则创建⼀个if (!tempFile.exists()) {tempFile.mkdir();}//1.创建diskFileItemFactory对象,处理⽂件上传路径或者⼤⼩限制DiskFileItemFactory factory = getDiskFileItemFactory(tempFile);//2.获取ServletFileUploadServletFileUpload upload = getServletFileUpload(factory);//3.处理上传的⽂件try {String msg = uploadParseRequest(upload, req, uploadPath);//转发req.setAttribute("msg",msg);req.getRequestDispatcher("info.jsp").forward(req, resp);} catch (FileUploadException e) {e.printStackTrace();}}public DiskFileItemFactory getDiskFileItemFactory(File file) {DiskFileItemFactory factory = new DiskFileItemFactory();//创建⼀个缓存区,当上传⽂件⼤于设置的缓存区时,将该⽂件放到临时⽬录factory.setSizeThreshold(1024 * 1024);//缓存区⼤⼩为1Mfactory.setRepository(file);//临时⽬录return factory;}public ServletFileUpload getServletFileUpload(DiskFileItemFactory factory) {ServletFileUpload upload = new ServletFileUpload(factory);//监听⽂件上传进度upload.setProgressListener(new ProgressListener() {@Overridepublic void update(long uploaded, long totalSize, int i) {System.out.println("已上传:"+(uploaded*100)/totalSize+"%");}});upload.setHeaderEncoding("UTF-8");//乱码处理upload.setFileSizeMax(1024 * 1024 * 10);//设置单个⽂件的最⼤值10Mupload.setSizeMax(1024 * 1024 * 100);//设置总共能上传⽂件的最⼤值100Mreturn upload;}public String uploadParseRequest(ServletFileUpload upload, HttpServletRequest req, String uploadPath) throws FileUploadException, IOException { String msg = "";//把前端请求解析,封装成⼀个List对象List<FileItem> fileItems = upload.parseRequest(req);for (FileItem fileItem : fileItems) {if (fileItem.isFormField()) {//判断上传的⽂件是普通的表单还是带⽂件的表单String name = fileItem.getName();//前端表单控件的name:usernameString value = fileItem.getString("UTF-8");//乱码处理System.out.println(name + ":" + value);} else {//判断为上传的⽂件//==================处理⽂件=====================String uploadFileName = fileItem.getName();//前端表单控件的nameSystem.out.println("上传的⽂件名:" + uploadFileName);if (uploadFileName.trim().equals("") || uploadFileName == null) {//可能存在不合法的情况continue;}String fileName = uploadFileName.substring(stIndexOf("/") + 1);//⽂件名String fileExtName = uploadFileName.substring(stIndexOf(".") + 1);//⽂件后缀名System.out.println("⽂件名:" + fileName + "--⽂件后缀:" + fileExtName);//==================存放地址==================String uuidPath = UUID.randomUUID().toString();//⽂件存储的真实路径String realPath = uploadPath + "/" + uuidPath;System.out.println("⽂件上传到的位置:"+realPath);//给每个⽂件创建⼀个⽂件夹File realPathFile = new File(realPath);if (!realPathFile.exists()) {//如果⽂件夹不存在,则创建⼀个realPathFile.mkdir();}//==================⽂件传输==================//获得⽂件上传的流InputStream inputStream = fileItem.getInputStream();//创建⼀个⽂件输出流FileOutputStream fileOutputStream = new FileOutputStream(realPath + "/" + fileName);//创建⼀个缓冲区byte[] buffer = new byte[1024 * 1024];//判断读取是否完毕int len = 0;while ((len = inputStream.read(buffer)) > 0) {fileOutputStream.write(buffer, 0, len);}//关闭流fileOutputStream.close();inputStream.close();msg = "上传成功";fileItem.delete();//上传成功,清除临时⽂件}}return msg;}⽂件上传的注意事项1、为保证服务器安全,上传的⽂件应该放在外界⽆法直接访问的⽬录下,例如放在WEB-INF⽬录下。
java带参数批量上传文件的方法

一、简介在日常的工作和生活中,我们经常会遇到需要批量上传文件的情况,而Java作为一种广泛应用于企业级应用开发的编程语言,提供了一种方便快捷的方法来实现批量上传文件的操作。
本文将针对Java中带参数批量上传文件的方法进行介绍和讨论,希望能够为读者提供一些有用的参考和帮助。
二、利用java.io包实现带参数批量上传文件1. 在Java中,我们可以利用java.io包提供的File类和FileInputStream类来实现带参数批量上传文件的操作。
我们需要创建一个File对象来表示要上传的文件,然后利用FileInputStream类来读取文件内容,并将内容上传到目标目录中。
2. 代码示例:```javapublic class FileUpload {public static void main(String[] args) {String sourceDirectory = args[0]; // 源目录String targetDirectory = args[1]; // 目标目录File sourceDir = new File(sourceDirectory);File[] files = sourceDir.listFiles();for (File file : files) {try (FileInputStream fis = new FileInputStream(file)) {// 上传文件到目标目录// ...} catch (IOException e) {e.printStackTrace();}}}}```3. 在上面的代码示例中,我们首先通过命令行参数获取源目录和目标目录的路径,然后利用File类的listFiles()方法获取源目录中的所有文件,最后利用FileInputStream类读取文件内容并上传到目标目录中。
需要注意的是,在实际应用中,需要根据具体的需求对代码进行相应的修改和完善。
fileupload上传代码与txt文件取值实例

Fileupload 上传一般的上传下载相信大家都会得。
最近做了一个txt文件的读取,原本简单的事情,结果想了一个下午,只因逻辑思维错误。
下面就跟大家说一下这个功能的实现以及利用fileupload上传文件的快速开发。
功能:按一定的规则读取一个txt文件里面的内容。
首先我们先到网上下载两个包:commons-fileupload-1.2.2.jarcommons-io-2.1.jar有了这两个包之后我们就可以利用fileupload控件来上传文件到服务器了。
下面代码是上传代码【UploadUtil类】(通用代码,大家可以直接拷贝过去用)import java.io.File;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.Iterator;import java.util.List;import javax.servlet.http.HttpServletRequest;import mons.fileupload.FileItem;import mons.fileupload.disk.DiskFileItemFactory; import mons.fileupload.servlet.ServletFileUpload;public class UploadUtil{public static final long serialVersionUID =0L;@SuppressWarnings("unchecked")public static List<String> upload(HttpServletRequest request,String targetFolder){List<String> files = new ArrayList<String>();File targetFile = new File(request.getSession().getServletContext().getRealPath(targetF older));//获取向项目路径File temFile = new File(request.getSession().getServletContext().getRealPath("/temp" ));//获取项目路劲临时目录if(!targetFile.exists()){targetFile.mkdirs();}if(!temFile.exists()){temFile.mkdirs();}try{if(ServletFileUpload.isMultipartContent(request)){DiskFileItemFactory factory = new DiskFileItemFactory();factory.setSizeThreshold(3000000);factory.setRepository(temFile);ServletFileUpload upload = new ServletFileUpload(factory);upload.setHeaderEncoding("UTF-8");upload.setSizeMax(3000000);// Parse the requestList<FileItem> items = upload.parseRequest(request);Iterator<FileItem> iter = items.iterator();while (iter.hasNext()) {FileItem item = (FileItem) iter.next();String fileName = item.getName();if(!item.isFormField()){if(fileName!=null&&!fileName.isEmpty()){int dot = stIndexOf(".");fileName = fileName.substring(dot);fileName = item.getFieldName()+"_"+rename()+fileName;File uploadedFile = new File(targetFile,fileName);item.write(uploadedFile);files.add(uploadedFile.getAbsolutePath());}}}}return files;}catch(Exception e){if(files!=null&&!files.isEmpty()){for(String fileName:files){File file = new File(fileName);if(file.exists()){file.delete();}}}e.printStackTrace();return null;}}/*** 获取时间命名文档* @return*/private static String rename(){String name="";SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");Date date = new Date();name=sdf.format(date);name = name+Math.random()*10;return name;}}有了这个类之后我们是否就可以直接能上传文件了呢??还不行,我们还要设置一下jsp页面。
Java通用文件上传功能实现

Java通用文件上传功能实现一、文件上传流程说明:Java文件上传功能是指在Java开发中,实现文件上传的功能,可以用于各种场景,如网站上传图片、文件管理系统等。
以下是一种常见的实现方式:1、创建一个包含文件上传功能的表单页面,用户可以选择要上传的文件并提交表单。
2、在后端Java代码中,接收表单提交的文件数据。
可以使用Apache Commons FileUpload库或Spring框架提供的MultipartFile类来处理文件上传。
3、对接收到的文件进行处理,可以将文件保存到服务器的指定位置,或者将文件存储到数据库中。
4、返回上传成功或失败的信息给用户。
二、代码实现,方案一:在Java中实现文件上传功能可以通过以下步骤来完成:1、创建一个HTML表单,用于选择要上传的文件:<form action="upload"method="post" enctype="multipart/form-data"> <input type="file" name="file" /><input type="submit" value="Upload" /></form>2、创建一个Servlet或者Controller来处理文件上传请求:@WebServlet("/upload")public class UploadServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) {// 获取上传的文件Part filePart = request.getPart("file");String fileName = filePart.getSubmittedFileName();// 指定上传文件的保存路径String savePath = "C:/uploads/" + fileName;// 将文件保存到指定路径filePart.write(savePath);// 返回上传成功的消息response.getWriter().println("File uploaded successfully!");}}3、配置web.xml(如果使用传统的Servlet方式)或者使用注解(如果使用Servlet 3.0+)来映射Servlet。
上传功能以二进制来判断文件后缀java

上传功能以二进制来判断文件后缀java在许多应用场景中,我们需要实现文件上传功能。
为了保证数据的正确性和便捷性,通常需要对上传的文件后缀进行判断,以便确保用户上传的文件符合预期格式。
本文将介绍如何利用Java实现文件上传功能,并通过二进制方式判断文件后缀。
1.了解上传功能的需求在开始编写代码之前,我们需要明确文件上传功能的需求。
例如,我们需要支持哪些文件类型、文件大小限制、并发上传等。
了解这些需求后,我们可以更好地设计上传功能。
2.掌握二进制判断文件后缀的方法要判断文件后缀,我们可以通过分析文件的二进制数据来实现。
通常情况下,文件后缀是由一个固定的字节序列表示的。
例如,文本文件的扩展名(如.txt)由ASCII码表示,图片文件的扩展名(如.jpg)则包含特定的标记字节。
通过识别这些字节序列,我们可以准确地判断文件后缀。
3.应用Java实现上传功能和文件后缀判断以下是使用Java实现文件上传功能和文件后缀判断的示例代码:```javaimport java.io.File;import java.io.IOException;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;import java.util.Arrays;public class FileUpload {public static void main(String[] args) {String filePath = "path/to/your/file";String uploadPath = "path/to/upload/folder";try {uploadFile(filePath, uploadPath);} catch (IOException e) {e.printStackTrace();}}public static void uploadFile(String filePath, String uploadPath) throws IOException {File file = new File(filePath);Path uploadPathObj = Paths.get(uploadPath);if (!Files.exists(uploadPathObj)) {Files.createDirectories(uploadPathObj);}String fileName = file.getName();String fileExtension = getFileExtension(fileName);Path targetPath = uploadPathObj.resolve(fileName);Files.copy(file.toPath(), targetPath, StandardCopyOption.REPLACE_EXISTING);System.out.println("File uploaded successfully!");}public static String getFileExtension(String fileName) {int dotIndex = stIndexOf(".");if (dotIndex > 0 && dotIndex < fileName.length() - 1) {return fileName.substring(dotIndex + 1);}return "";}}```上述代码首先定义了上传文件的方法`uploadFile`,它接收文件路径和上传路径作为参数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
∙一个通用的Java文件上传类,支持上传图片,支持生成缩略图,设置最大上传文件字节数,不设置时默认10M,可接收来自表单的数据,当有多个文件域时,只上传有文件的,忽略其他不是文件域的所有表单信息,支持用户对上传文件大小,字节进行设置,本上传类可过滤掉以下文件类型:".exe", ".com", ".cgi", ".asp", ".php", ".jsp"等,你可自已添加过滤的文件后缀,上传文件时如果没有上传目录,则自动创建它。
∙package com.gootrip.util;import java.io.File;import java.util.*;import mons.fileupload.*;import javax.servlet.http.HttpServletRequest;import java.util.regex.Pattern;import java.io.IOException;import mons.fileupload.servlet.ServletFileUpload;import mons.fileupload.disk.DiskFileItemFactory;import java.util.regex.Matcher;/*** TODO 要更改此生成的类型注释的模板,请转至* 窗口-首选项- Java -代码样式-代码模板*/public class FileUploadUtil {//当上传文件超过限制时设定的临时文件位置,注意是绝对路径private String tempPath = null;//文件上传目标目录,注意是绝对路径private String dstPath = null;//新文件名称,不设置时默认为原文件名private String newFileName = null;//获取的上传请求private HttpServletRequest fileuploadReq = null;//设置最多只允许在内存中存储的数据,单位:字节,这个参数不要设置太大private int sizeThreshold = 4096;//设置允许用户上传文件大小,单位:字节//共10Mprivate long sizeMax = 10485760;//图片文件序号private int picSeqNo = 1;private boolean isSmallPic = false;public FileUploadUtil(){}public FileUploadUtil(String tempPath, String destinationPath){ this.tempPath = tempPath;this.dstPath = destinationPath;}public FileUploadUtil(String tempPath, String destinationPath, HttpServletRequest fileuploadRequest){this.tempPath = tempPath;this.dstPath = destinationPath;this.fileuploadReq = fileuploadRequest;}/** 文件上载* @return true —— success; false —— fail.*/public boolean Upload(){DiskFileItemFactory factory = new DiskFileItemFactory();try {//如果没有上传目的目录,则创建它FileUtil.makeDirectory(dstPath+"/ddd");/*if (!FileUtil.makeDirectory(dstPath+"/ddd")) {throw new IOException("Create destination Directory Error.");}*///如果没有临时目录,则创建它FileUtil.makeDirectory(tempPath+"/ddd");/*if (!FileUtil.makeDirectory(tempPath+"/ddd")) {throw new IOException("Create Temp Directory Error.");}*///上传项目只要足够小,就应该保留在内存里。
//较大的项目应该被写在硬盘的临时文件上。
//非常大的上传请求应该避免。
//限制项目在内存中所占的空间,限制最大的上传请求,并且设定临时文件的位置。
//设置最多只允许在内存中存储的数据,单位:字节factory.setSizeThreshold(sizeThreshold);// the location for saving data that is larger than getSizeThreshold()factory.setRepository(new File(tempPath));ServletFileUpload upload = new ServletFileUpload(factory);//设置允许用户上传文件大小,单位:字节upload.setSizeMax(sizeMax);List fileItems = upload.parseRequest(fileuploadReq);Iterator iter = fileItems.iterator();// 正则匹配,过滤路径取文件名String regExp = ".+\\\\(.+)$";// 过滤掉的文件类型String[] errorType = {".exe", ".com", ".cgi", ".asp", ".php", ".jsp"};Pattern p = pile(regExp);while (iter.hasNext()) {System.out.println("++00++====="+newFileName);FileItem item = (FileItem) iter.next();//忽略其他不是文件域的所有表单信息if (!item.isFormField()) {String name = item.getName();System.out.println("++++====="+name);long size = item.getSize();//有多个文件域时,只上传有文件的if ((name == null || name.equals("")) && size == 0)continue;Matcher m = p.matcher(name);boolean result = m.find();if (result) {for (int temp = 0; temp < errorType.length; temp++) {if (m.group(1).endsWith(errorType[temp])) {throw new IOException(name + ": Wrong File Type");}}String ext = "."+FileUtil.getTypePart(name);try {//保存上传的文件到指定的目录//在下文中上传文件至数据库时,将对这里改写 //没有指定新文件名时以原文件名来命名if (newFileName == null || newFileName.trim().equals("")){item.write(new File(dstPath +"/"+ m.group(1)));}else{String uploadfilename = "";if (isSmallPic){uploadfilename = dstPath +"/"+ newFileName+"_"+picSeqNo+"_small"+ext;}else{uploadfilename = dstPath +"/"+ newFileName+"_"+picSeqNo+ext;}//生成所有未生成的目录System.out.println("++++====="+uploadfilename);FileUtil.makeDirectory(uploadfilename); //item.write(new File(dstPath +"/"+ newFileName));item.write(new File(uploadfilename)); }picSeqNo++;//out.print(name + " " + size + "");} catch (Exception e) {//out.println(e);throw new IOException(e.getMessage());}} else {throw new IOException("fail to upload");}}}} catch (IOException e) {System.out.println(e);} catch (FileUploadException e) {System.out.println(e);}return true;}/**从路径中获取单独文件*/public String GetFileName(String filepath){String returnstr = "*.*";int length = filepath.trim().length(); filepath = filepath.replace('\\', '/');if(length >0){int i = stIndexOf("/");if (i >= 0){filepath = filepath.substring(i + 1); returnstr = filepath;}}return returnstr;}/*** 设置临时存贮目录*/public void setTmpPath(String tmppath){this.tempPath = tmppath;}/*** 设置目标目录*/public void setDstPath(String dstpath) {this.dstPath = dstpath;}/*** 设置最大上传文件字节数,不设置时默认10M*/public void setFileMaxSize(long maxsize) {this.sizeMax = maxsize;}/*** 设置Http 请求参数,通过这个能数来获取文件信息 */public void setHttpReq(HttpServletRequest httpreq) {this.fileuploadReq = httpreq;}/*** 设置Http 请求参数,通过这个能数来获取文件信息*/public void setNewFileName(String filename) {this.newFileName = filename;}/*** 设置此上传文件是否是缩略图文件,这个参数主要用于缩略图命名 */public void setIsSmalPic(boolean isSmallPic) {this.isSmallPic = isSmallPic;}/*** 设置Http 请求参数,通过这个能数来获取文件信息*/public void setPicSeqNo(int seqNo) {this.picSeqNo = seqNo;}}∙可保存上述代码为类文件,用在JAVA或JSP程序中,Java开发的朋友们,应该会轻易使用它。