Java文件上传类FileUploadUtil.java代码+注释

合集下载

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传输文件 方案

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实现文件上传功能详解

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实现⽂件上传功能本⽂实例为⼤家分享了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中带参数批量上传文件的方法进行介绍和讨论,希望能够为读者提供一些有用的参考和帮助。

二、利用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文件的读取,原本简单的事情,结果想了一个下午,只因逻辑思维错误。

下面就跟大家说一下这个功能的实现以及利用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文件上传功能是指在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在许多应用场景中,我们需要实现文件上传功能。

为了保证数据的正确性和便捷性,通常需要对上传的文件后缀进行判断,以便确保用户上传的文件符合预期格式。

本文将介绍如何利用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`,它接收文件路径和上传路径作为参数。

Java大文件上传详解及实例代码

Java大文件上传详解及实例代码

Java⼤⽂件上传详解及实例代码Java⼤⽂件上传详解前⾔:上周遇到这样⼀个问题,客户上传⾼清视频(1G以上)的时候上传失败。

⼀开始以为是session过期或者⽂件⼤⼩受系统限制,导致的错误。

查看了系统的配置⽂件没有看到⽂件⼤⼩限制,web.xml 中seesiontimeout是30,我把它改成了120。

但还是不⾏,有时候10分钟就崩了。

同事说,可能是客户这⾥服务器⽹络波动导致⽹络连接断开,我觉得有点道理。

但是我在本地测试的时候发觉上传也失败,⽹络原因排除。

看了⽇志,错误为:ng.OutOfMemoryError Java heap space上传⽂件代码如下:public static String uploadSingleFile(String path,MultipartFile file) {if (!file.isEmpty()) {byte[] bytes;try {bytes = file.getBytes();// Create the file on serverFile serverFile = createServerFile(path,file.getOriginalFilename());BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(serverFile));stream.write(bytes);stream.flush();stream.close();("Server File Location="+ serverFile.getAbsolutePath());return getRelativePathFromUploadDir(serverFile).replaceAll("\\\\", "/");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println(e.getMessage());}}else{System.out.println("⽂件内容为空");}return null;}乍⼀看没什么⼤问题,我在 stream.write(bytes); 这句加了断点,发觉根本就没⾛到。

Java框架中的文件上传下载

Java框架中的文件上传下载

Java框架中的文件上传下载文件上传和下载是Web开发中常见的功能之一。

在Java框架中,我们可以利用各种技术和工具来实现文件的上传和下载操作。

本文将介绍一些常用的Java框架以及它们提供的文件上传和下载功能。

一、Servlet APIServlet是Java Web开发的基础。

在Servlet API中,提供了上传和下载文件的相关类和方法。

1. 文件上传:对于文件上传,可以使用ServletRequest对象的getPart()方法或者getParts()方法来获取上传的文件。

然后可以通过Part对象的getSize()、getContentType()等方法获取文件的大小、类型等信息,并通过Part对象的write()方法将文件保存到指定路径。

2. 文件下载:对于文件下载,可以通过HttpServletResponse对象的setContentType()方法设置下载文件的MIME类型,通过setHeader()方法设置Content-Disposition头部信息,然后使用OutputStream将文件内容写入response.getOutputStream()。

二、Apache Commons FileUploadApache Commons FileUpload是一个常用的文件上传组件,它提供了更方便的文件上传功能。

1. 文件上传:使用Apache Commons FileUpload,可以通过DiskFileItemFactory和ServletFileUpload来处理文件上传。

DiskFileItemFactory用于创建FileItem对象,ServletFileUpload用于解析请求并返回FileItem对象的列表。

通过遍历FileItem对象列表,可以获取文件的相关信息,并将文件保存到指定路径。

2. 文件下载:对于文件下载,Apache Commons FileUpload只提供了文件上传的功能,并没有提供文件下载的相关方法。

java upload方法中添加上传文件的逻辑

java upload方法中添加上传文件的逻辑

java upload方法中添加上传文件的逻辑在Java中,上传文件的逻辑通常涉及到使用Servlet和JSP技术。

以下是一个简单的示例,演示如何在Java Servlet中添加文件上传的逻辑:1. 首先,你需要在HTML表单中创建一个文件输入字段,以便用户可以选择要上传的文件:```html<form action="upload" method="post" enctype="multipart/form-data"><input type="file" name="file" /><input type="submit" value="Upload" /></form>```2. 然后,你需要创建一个Servlet来处理文件上传请求。

在这个Servlet中,你可以使用`Part`接口来获取上传的文件:```javaimport ;import ;WebServlet("/upload")public class FileUploadServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Part filePart = ("file"); // 获取文件String fileName = (()).getFileName().toString(); // 获取文件名InputStream fileContent = (); // 获取文件内容// 在这里添加你的文件处理逻辑,例如保存文件到服务器或数据库等 // 示例:保存文件到本地目录File uploadedFile = new File("uploaded/" + fileName);OutputStream out = new FileOutputStream(uploadedFile);byte[] buffer = new byte[4096];int bytesRead = -1;while ((bytesRead = (buffer)) != -1) {(buffer, 0, bytesRead);}();// 完成后,可以重定向到成功页面或显示其他信息给用户("");}}```这个示例展示了如何使用``接口来获取上传的文件,并使用``包中的类来处理文件内容。

java实现图片或文件的上传功能具体思路及代码

java实现图片或文件的上传功能具体思路及代码

java实现图片或文件的上传功能具体思路及代码一、思路此刻不管是博客论坛仍是企业办公,都离不开资源的共享。

通过文件上传的方式,与大伙儿同分享,从而达到公共间普遍的沟通和交流,咱们既能够从中取得更多的知识和体会,也能通过他人的反馈达到自我改良和提升的目的。

下面我就为大伙儿介绍web项目中的这一上传功能,那么文件是如何从本地发送到效劳器的呢?看我慢慢道来:第一,咱们创建一个新的web工程,在工程的WebRoot目录下新建一个upload文件夹,如此当咱们将该工程部署到效劳器上时,效劳器便也生成个upload文件夹,用来寄存上传的资源。

然后,在WebRoot目录下新建一个jsp文件,要紧实现的作用确实是选择上传的文件,提交至servlet来进行处置详细代码如下:一个form将文件信息通过post方式传送到指定的servlet二、代码复制代码代码如下:<%@ page language="java" import=".*" pageEncoding="utf-8"%><%String path = ();String basePath = ()+":etFileSizeMax(1024*400);在这儿咱们也能够将其设置成一个条件,当文件大于最大值时向页面提交织误提示。

另外,也能够读取选择文件的后缀来挑选出能够上传的类型。

这些代码大伙儿自己扩展,再也不细谈。

通过servlet,将正确的文件传送到效劳端的upload文件夹中。

这儿要注意,若是以后将工程从tomcat移除后,这些文件就会被自动删除。

上传终止以后,使页面转到上传成功页面l。

当用户看到此页面时,说明你已实现文件的上传功能。

java web中commons FileUpload文件上传(附代码)

java web中commons FileUpload文件上传(附代码)

java web中commons FileUpload文件上传一、文件上传1.创建项目,导入jar包将commons-fileupload.jar粘贴到项目下的lib文件夹下。

2.编写上传的jsp页面3.Upload.jsp源代码如下:<%@page language="java"contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html><html><head><meta charset="utf-8"><title>文件上传</title></head><body><form action="/fileUploadDown/Uploadservlet"method="post"enctype="multipart/form-data">请选择文件:<input type="file"name="myfile"/><input type="submit"value="上传"></form></body></html>4.编写处理上传请求的servletimport java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import mons.fileupload.FileItem;import mons.fileupload.FileItemFactory;import mons.fileupload.FileUploadException; import mons.fileupload.disk.DiskFileItemFactory; import mons.fileupload.servlet.ServletFileUpload; import org.apache.tomcat.util.buf.StringUtils;import org.apache.tomcat.util.http.fileupload.FileUtils;@WebServlet("/Uploadservlet")public class Uploadservlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {FileItemFactory factory = new DiskFileItemFactory();request.setCharacterEncoding("utf-8");ServletFileUpload fileupload = new ServletFileUpload(factory);fileupload.setFileSizeMax(1024 * 1024 * 10);// 限制单个文件上传大小为10MBfileupload.setSizeMax(1024 * 1024 * 20);// 限制多文件上传大小为20MBtry {// 解析请求,将表单中的每一个input标签解析成一个FileItemList<FileItem> fileList= fileupload.parseRequest(request);for (FileItem fileItem : fileList) {if (fileItem.isFormField()) {// 是否为普通表单元素String filedName = fileItem.getFieldName();// 获得字段名称String value = fileItem.getString();// 获得字段的值System.out.println(filedName + ":" + value);} else {String fileName = fileItem.getName();// 获得原始路径的文件名fileName =fileName.substring(stIndexOf("\\") + 1);// 获得文件名InputStream is = fileItem.getInputStream();String parentDir =this.getServletContext().getRealPath("/WEB-INF/upload/");String filePath = parentDir + fileName;// 文件保存的路径File file = new File(filePath);if (!file.getParentFile().exists()) { // 父目录不存在file.getParentFile().mkdirs(); // mkdirs():创建文件夹,如果上级目录没有的话,也一并创建出来。

java文件上传(单文件与多文件)

java文件上传(单文件与多文件)

java⽂件上传(单⽂件与多⽂件)java ⽂件上传(单⽂件与多⽂件)⼀、简述⼀个javaWeb项⽬中,⽂件上传功能⼏乎是必不可少的,本⼈在项⽬开发中也时常会遇到,以前也没怎么去理它,今天有空学习了⼀下这⽅⾯的知识,于是便将本⼈学到的SpringMVC中单⽂件与多⽂件上传这部分知识做下笔记。

⼆、单⽂件上传1、页⾯这⾥以⼀个简单的表单提交为例⼦,⽂件上传需要将表单的提交⽅法设置为post,将enctype的值设置为”multipart/form-data”。

<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data"><input type="file" name="img"><br /><input type="submit" name="提交"></form>2、控制器在Controller的处理⽅法中,使⽤MultipartFile对象作为参数接收前端上传过来的⽂件,具体说明请看代码注释。

@Controller@RequestMapping("/test")public class MyController {@RequestMapping(value = "/upload.do", method = RequestMethod.POST)// 这⾥的MultipartFile对象变量名跟表单中的file类型的input标签的name相同,所以框架会⾃动⽤MultipartFile对象来接收上传过来的⽂件,当然也可以使⽤@RequestParam("img")指定其对应的参数名称 public String upload(MultipartFile img, HttpSession session)throws Exception {// 如果没有⽂件上传,MultipartFile也不会为null,可以通过调⽤getSize()⽅法获取⽂件的⼤⼩来判断是否有上传⽂件if (img.getSize() > 0) {// 得到项⽬在服务器的真实根路径,如:/home/tomcat/webapp/项⽬名/imagesString path = session.getServletContext().getRealPath("images");// 得到⽂件的原始名称,如:美⼥.pngString fileName = img.getOriginalFilename();// 通过⽂件的原始名称,可以对上传⽂件类型做限制,如:只能上传jpg和png的图⽚⽂件if (fileName.endsWith("jpg") || fileName.endsWith("png")) {File file = new File(path, fileName);img.transferTo(file);return "/success.jsp";}}return "/error.jsp";}}3、springmvc.xml配置使⽤MultipartFile对象接收前端上传过来的⽂件,还需要在springmvc的配置⽂件中进⾏如下配置:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:mvc="/schema/mvc" xmlns:xsi="/2001/XMLSchema-instance"xmlns:aop="/schema/aop" xmlns:tx="/schema/tx"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/tx/schema/tx/spring-tx.xsd/schema/mvc/schema/mvc/spring-mvc.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/context/schema/context/spring-context.xsd">...<!-- 注意:CommonsMultipartResolver的id是固定不变的,⼀定是multipartResolver,不可修改 --><bean id="multipartResolver" class="monsMultipartResolver"><!-- 如果上传后出现⽂件名中⽂乱码可以使⽤该属性解决 --><property name="defaultEncoding" value="utf-8"/><!-- 单位是字节,不设置默认不限制总的上传⽂件⼤⼩,这⾥设置总的上传⽂件⼤⼩不超过1M(1*1024*1024) --><property name="maxUploadSize" value="1048576"/><!-- 跟maxUploadSize差不多,不过maxUploadSizePerFile是限制每个上传⽂件的⼤⼩,⽽maxUploadSize是限制总的上传⽂件⼤⼩ --><property name="maxUploadSizePerFile" value="1048576"/></bean><!-- 设置⼀个简单的异常解析器,当⽂件上传超过⼤⼩限制时跳转 --><bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><property name="defaultErrorView" value="/error.jsp"/></bean></beans>上⾯配置⽂件中的CommonsMultipartResolver下的属性值配置不是必须的,你也可以全部不写。

FileUpload实现上传

FileUpload实现上传

1.创建一个Servlet----Upload.java文件,用于实现上传文件import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;import mons.fileupload.*;public class Upload extends HttpServlet {private String uploadPath = "d:\\upload\\"; // 上传文件的目录private String tempPath = "d:\\upload\\tmp\\"; // 临时文件目录在doPost()方法中,当servlet收到浏览器发出的Post请求后,实现文件上传。

以下是示例代码:public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {final long MAX_SIZE = 3 * 1024 * 1024;// 设置上传文件最大为3Mresponse.setContentType("text/html");// 设置字符编码为UTF-8, 这样支持汉字显示response.setCharacterEncoding("UTF-8");// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload DiskFileItemFactory dfif = new DiskFileItemFactory();dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘dfif.setRepository(new File(request.getRealPath("/")+ "/WEB-INF/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 (Exception e) {e.printStackTrace();}// 得到所有上传的文件Iterator fileItr = fileList.iterator();// 循环处理所有文件while (fileItr.hasNext()) {FileItem fileItem = null;String path = null;long size = 0;// 得到当前文件fileItem = (FileItem) fileItr.next();// 忽略简单form字段而不是上传域的文件域(<input type="text" />等)if (fileItem == null || fileItem.isFormField()) {continue;}// 得到文件的完整路径path = fileItem.getName();// 得到文件的大小size = fileItem.getSize();// 得到去除路径的文件名String t_name = path.substring(stIndexOf("\\") + 1);// 得到文件的扩展名(无扩展名时将得到全名)String t_ext = t_name.substring(t_stIndexOf(".") + 1);long now = System.currentTimeMillis();// 根据系统时间生成上传后保存的文件名String prefix = String.valueOf(now);// 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下String u_name = request.getRealPath("/")+"/WEB-INF/upload/"+ prefix + "." + t_ext;try {// 保存文件fileItem.write(new File(u_name));out.println("文件上传成功. 已保存为: " + prefix + "." + t_ext+ " &nbsp;&nbsp;文件大小: " + size + "字节<p />");} catch (Exception e) {e.printStackTrace();}}}编译该servlet,注意要指定classpath,确保包含commons-upload-1.0.jar和tomcat\common\lib\servlet-api.jar。

Java多方式实现文件上传详解

Java多方式实现文件上传详解

在Struts 2中实现文件上传前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题,所以今天我们就来讨论一下这个问题。

实现原理Struts 2是通过Commons FileUpload文件上传。

Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。

从而我们就能够以本地文件方式的操作浏览器上传的文件。

具体实现前段时间Apache发布了Struts 2.0.6 GA,所以本文的实现是以该版本的Struts 作为框架的。

以下是例子所依赖类包的列表:清单1 依赖类包的列表首先,创建文件上传页面FileUpload.jsp,内容如下:<% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncodi ng = " utf-8 " %><% @ taglib prefix = " s " uri = " /struts-tags " %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/ TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><title> Struts 2 File Upload </title></head><body><s:form action="fileUpload"method="POST"enctype="multipart/form-data"> <s:file name="myFile"label="Image File"/><s:textfield name="caption"label="Caption"/><s:submit /></s:form></body></html>清单2 FileUpload.jsp在FileUpload.jsp中,先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处。

java学习案例-上传文件

java学习案例-上传文件

客户端向服务端上传文件【案例介绍】1.案例描述编写一个客户端向服务端上传文件的程序,要求使用TCP通信的的知识,将本地机器输入的路径下的文件上传到D盘中名称为upload的文件夹中。

并把客户端的IP地址加上count标识作为上传后文件的文件名,即IP(count)的形式。

其中,count随着文件的增多而增大,例如127.0.0.(1).jpg、127.0.0.(2).jpg。

2.效果显示上传文件之前上传文件之后【案例目标】●学会分析“文件上传”思路。

●根据思路独立完成“文件上传”任务的源代码编写、编译及运行。

●掌握网络通信中TCP协议的编程原理。

●掌握TCP网络通信ServerSocket和Socket的使用。

●掌握多线程的使用。

【案例分析】(1)根据任务描述中使用TCP通信的知识实现文件上传功能可知,要实现此功能,需要定义一个服务器接收文件的程序和一个客户端上传文件的程序。

(2)首先要编写服务器端程序来接收文件。

服务器端需要使用ServerSocket对象的accept()方法接收客户端的请求,由于一个服务器可能对于多个客户端,所以当客户端与服务器端简历连接后,服务器需要单独开启一个新的线程来处理与客户端的交互,这时需要在服务器端编写开启新线程的方法。

在新线程的方法中,需要获取客户端的端口号,并且使用输入输出流来传输文件到指定的目录中。

(3)编写客户端的功能代码,客户端功能的实现,因为是用户自己输入上传文件。

所以要定义键盘录入。

录入后需要使用Socket类来创建客户对象,并通过输入输出流来定义指定的文件。

(4)最后我们启动程序,先启动服务端程序,再运行客户端程序来测试上传的结果。

【案例实现】(1)首先编写服务器端的程序,用来接收文件,其代码具体如下所示。

FileServer.java1 package chapter0903;2 import java.io.File;3 import java.io.FileOutputStream;4 import java.io.InputStream;5 import java.io.OutputStream;6 import .ServerSocket;7 import .Socket;8 public class FileServer {9 public static void main(String[] args) throws Exception {10 //创建ServerSocket对象11 ServerSocket serverSocket = new ServerSocket(10001);12 while (true) {13 // 调用accept()方法接收客户端请求,得到Socket对象14 Socket s = serverSocket.accept();15 // 每当和客户端建立Socket连接后,单独开启一个线程处理和客户端的交互16 new Thread(new ServerThread(s)).start();17 }18 }19 }20 class ServerThread implements Runnable {21 // 持有一个Socket类型的属性22 private Socket socket;23 // 构造方法中把Socket对象作为实参传入24 public ServerThread(Socket socket) {25 this.socket = socket;26 }27 public void run() {28 // 获取客户端的IP地址29 String ip = socket.getInetAddress().getHostAddress();30 // 上传图片个数31 int count = 1;32 try {33 InputStream in = socket.getInputStream();34 // 创建上传图片目录的File对象35 File parentFile = new File("D:\\upload\\");36 // 如果不存在,就创建这个目录37 if (!parentFile.exists()) {38 parentFile.mkdir();39 }40 // 把客户端的IP地址作为上传文件的文件名41 File file = new File(parentFile, ip + "(" + count +42 ").jpg");43 while (file.exists()) {44 // 如果文件名存在,则把count++45 file = new File(parentFile, ip + "(" + (count++) +46 ").jpg");47 }48 // 创建FileOutputStream对象49 FileOutputStream fos = new FileOutputStream(file);50 // 定义一个字节数组51 byte[] buf = new byte[1024];52 // 定义一个int类型的变量len,初始值为053 int len = 0;54 // 循环读取数据55 while ((len = in.read(buf)) != -1) {56 fos.write(buf, 0, len);57 }58 // 获取服务端的输出流59 OutputStream out = socket.getOutputStream();60 // 上传成功后向客户端写出“上传成功”61 out.write("上传成功".getBytes());62 // 关闭输出流对象63 fos.close();64 // 关闭Socket对象65 socket.close();66 } catch (Exception e) {67 throw new RuntimeException(e);68 }69 }70 }运行结果如图所示。

Java文件上传类FileUploadUtil.java代码+注释

Java文件上传类FileUploadUtil.java代码+注释

∙一个通用的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.");}*///上传项目只要足够小,就应该保留在内存里。

java文件上传

java文件上传

java⽂件上传java ⽂件上传⼯具包主要有两个⽅法:单⽂件上传和多⽂件上传@Slf4jpublic class UploadFileUtil {//上传单张图⽚public String uploadPicture(MultipartFile photo) throws IOException {String path = ResourceUtils.getURL("classpath:").getPath() + "static/";String fileName = snowflakeUtil.get().toString() + photo.getOriginalFilename();File file = new File(path, fileName);if (!file.getParentFile().exists()) {file.getParentFile().mkdir();}photo.transferTo(file);log.warn("⽂件上传成功,⽂件名称为:--->" + fileName);String resultUrl = fileName;log.warn("⽂件上传的完整路径为:--->" + resultUrl);return resultUrl;}//上传多张图⽚public String uploadPictures(MultipartFile[] photos) throws FileNotFoundException {//获取⽂件上传的路径String path = ResourceUtils.getURL("classpath:").getPath() + "static/";String fileName = null;//定义⼀个数据,来存放他们存放的图⽚的路径ArrayList<String> list = new ArrayList<>();for (MultipartFile photo : photos) {try {fileName = snowflakeUtil.get().toString() + photo.getOriginalFilename();File file = new File(path, fileName);if (!file.getParentFile().exists()) {file.getParentFile().mkdir();}//完成上传photo.transferTo(file);//实际的图⽚存放路径String resultUrl = fileName;list.add(resultUrl);} catch (IOException e) {e.printStackTrace();}}("图⽚存放路径为:--->" + list.toString());return list.toString();}}。

Java实现文件上传

Java实现文件上传

Java实现⽂件上传最近⾃⼰在做⼀个⼩系统玩的时候涉及到了⽂件的上传,于是在⽹上找到Java上传⽂件的⽅案,最后确定使⽤common-fileupload实现上传操作。

需求说明⽤户添加页⾯有⼀个“上传”按钮,点击按钮弹出上传界⾯,上传完成后关闭上传界⾯。

所需Jar包commons.fileupload-1.2.0.jar、commons.logging-1.1.1.jar、commons.beanutils-1.8.0.jar、commons.collections-3.2.0.jar、commons.io-1.4.0.jar、ng-2.1.0.jar 实现效果代码实现⾸先编写核⼼代码,Javascript打开上传页⾯,并且从上传页获取返回参数,最后数据返回给回调函数callback:Js代码1. /**2. * 跳转到上传页3. * functionId:功能ID4. * fileType:⽂件类型5. * maxSize:⽂件容量上限6. * callback:回调函数,返回三个参数:⽂件真名、⽂件存放名和⽂件⼤⼩7. */8. function openUpload(functionId,fileType,maxSize,callback){9. var url = root+"/CommonController.jhtml?method=goFileUpload&";10. if(functionId!=null){11. url = url + "functionId="+functionId+"&";12. }13. if(fileType!=null){14. url = url + "fileType="+fileType+"&";15. }16. if(maxSize!=null){17. url = url + "maxSize="+maxSize;18. }19. var win = window.showModalDialog(url,"","dialogWidth:300px;dialogHeight:150px;scroll:no;status:no");20. if(win != null){21. var arrWin = win.split(",");22. callback(arrWin[0],arrWin[1],arrWin[2]);23. }24. }⽤户添加页⾯相关代码,点击“上传”按钮时调⽤上⾯的核⼼js代码,并且获取返回值Html代码1. <script>2. .......3.4. function openUpload_(){5. openUpload(null,'JPG,GIF,JPEG,PNG','5',callback);6. }7.8. /**9. * 回调函数,获取上传⽂件信息10. * realName真实⽂件名11. * saveName⽂件保存名12. * maxSize⽂件实际⼤⼩13. */14. function callback(realName,saveName,maxSize){15. $("#photo_").val(saveName);16. //回调后其它操作17. }18. </script>19.20. <tr>21. <td>头像:</td>22. <td>23. <input type="hidden" name="photo" id="photo_"></input>24. <input type="button" onclick="openUpload_()" value="上传"/>25. </td>26. </tr>⽂件上传的JSP代码,需要注意的是在head标签内添加<base target="_self">以防⽌页⾯跳转时弹出新窗⼝,⽤户选择指定⽂件,点击上传时就提交表单访问指定后台代码Html代码1. <%@ include file="/WEB-INF/jsp/header.jsp" %>2. <%@ page language="java" contentType="text/html; charset=UTF-8"3. pageEncoding="UTF-8"%>4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">5. <html>6. <head>7. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">8. <meta http-equiv="pragma" content="no-cache" />9. <base target="_self">10. <title>⽂件上传</title>11. </head>12. <body>13. <h5>⽂件上传</h5><hr/>14. <form id="file_upload_id" name="file_upload_name" action="<%=root%>/CommonController.jhtml?method=doFileUpload" method="post" enctype="multipart/form-data">15. <input type="hidden" name="functionId" value="${functionId}"/>16. <input type="hidden" name="fileType" value="${fileType}"/>17. <input type="hidden" name="maxSize" value="${maxSize}"/>18. <div><input type="file" name="file_upload"/></div>19. <c:if test="${maxSize!=null}">20. <div style="font: 12">⽂件最⼤不能超过${maxSize}MB</div>21. </c:if>22. <c:if test="${fileType!=null}">23. <div style="font: 12">⽂件格式必须是:${fileType}</div>24. </c:if>25. <div><input type="submit" value="上传"/></div>26. </form>27. </body>28. </html>CommonController⽬前有两个⽅法,⼀个是跳转到上传页⾯的⽅法,⼀个是执⾏上传操作的⽅法doFileUpload,上传⽅法运⾏的⼤概逻辑是:⾸先获取页⾯的请求参数,fileType⽤于限制上传⽂件格式,maxSize⽤于限制上传⽂件最⼤值,随后创建上传⽬录上传即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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开发的朋友们,应该会轻易使用它。

相关文档
最新文档