`
dou_shini8820
  • 浏览: 80372 次
社区版块
存档分类
最新评论

java文件上传的3种方式

 
阅读更多
三种文件上传组件代码.

 commons-fileupload上传组件: 
(此组件还需要commons-io.jar)

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  request.setCharacterEncoding("utf-8");
  response.setContentType("text/html;charset=utf-8");
  
  //上传文件工厂实例
  DiskFileItemFactory fileFactory = new DiskFileItemFactory();
  //上传文件存储路径
  String path = request.getSession().getServletContext().getRealPath("/") + "upload\\";
  //创建文件存放的仓库
  fileFactory.setRepository(new File(path));
  //设置缓存的大小(20M)
  fileFactory.setSizeThreshold(1024*1024*20);
  //用上传工厂实例创建上传文件对象
  ServletFileUpload fileUpload = new ServletFileUpload(fileFactory);
  fileUpload.setSizeMax(1024*1024*30);
  //fileUpload.setFileSizeMax(1024*1024*10);  //这句应该是设置单个文件大小的意思,但加上这句会失败. 
  //处理页面穿入的表单项
  List items = null;
  try {
   items = fileUpload.parseRequest(request);
  } catch (SizeLimitExceededException e) {
   request.setAttribute("errorInfo","上传文件超出30M");
   request.getRequestDispatcher("jsp/error.jsp").forward(request, response);
   return;
  } catch (FileUploadException e) {
   e.printStackTrace();
   request.setAttribute("errorInfo","上传出错");
   request.getRequestDispatcher("jsp/error.jsp").forward(request, response);
   return;
  }
  
  //遍历所有表单项
  for (int i = 0; i < items.size(); i++) {
   FileItem item = (FileItem)items.get(i);
   if ("".equals(item.getName())){//表示没有文件,这里暂时是通过文件名是否为空来判断是否有上传的文件的
    continue;
   }
   
   //如果这个表单是个普通表单域
   if (item.isFormField()){
    String name = item.getFieldName();
    String value = item.getString("utf-8");
    //将表单名和表单值传给页面
    request.setAttribute("name", name);
    request.setAttribute("value", value);
   } 
   //如果是文件域
   else {
    //获取文件域的表单域名
    String fieldName = item.getFieldName();
    //获取文件名
    String fileName = item.getName();
    //获取文件类型
    String contentType = item.getContentType();
    //对于上传文件的存放地址来建立一个输出流
    String newName = path + 
        (fileName.lastIndexOf(".") < 0 ? 
         fileName.substring(0, fileName.length()) : 
         System.currentTimeMillis() + fileName.substring(fileName.indexOf("."), fileName.length()));
    
    //判断上传文件是否在缓存之中
//这句可能表示上传的文件是否正在缓存向硬盘写入的过程中,但如果加上这句,会上传失败,不知为何...
//    if (item.isInMemory()){
     FileOutputStream output = new FileOutputStream(newName);
     InputStream input = item.getInputStream();
     byte[] buffer = new byte[1024];
     int len;
     while( (len = input.read(buffer)) > 0 ){
      output.write(buffer, 0, len);
     }
     input.close();
     output.flush();
     output.close();
//    }

    request.setAttribute("fieldName",fieldName);
    request.setAttribute("fileName",fileName);
    request.setAttribute("contentType",contentType);
   }
  }
  request.getRequestDispatcher("jsp/uploadResult.jsp").forward(request, response);
 }

  
COS上传组件:
public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  request.setCharacterEncoding("utf-8");
  response.setContentType("text/html;charset=utf-8");
  
  //上传文件存储路径
  String path = request.getSession().getServletContext().getRealPath("/") + "upload\\";
  
  //设置上传文件最大限度
  MultipartParser mp = null;
  try {
   mp = new MultipartParser(request,1024*1024*10*2);
  } catch (Exception e) {
   request.setAttribute("errorInfo","上传文件失败");
   request.getRequestDispatcher("jsp/error.jsp").forward(request, response);
   return;
  }
  
  //代表一个file
  Part part = null;
  while((part = mp.readNextPart()) != null){
   //获取表单名
   String fieldName = part.getName();
   //如果是文件域
   if (part.isFile()){
    //取得上传的该文件
    FilePart filePart = (FilePart)part;
    String fileName = filePart.getFileName();
    if (fileName != null && !"".equals(fileName)){
     long size = filePart.writeTo(new File(path));//将文件写入硬盘
     
     request.setAttribute("fieldName",fieldName);
     request.setAttribute("fileName",fileName);
     request.setAttribute("contentType",filePart.getContentType());
    }
    //表示没有文件
    else {
     System.out.println("没有文件");
    }
   }
  }
  request.getRequestDispatcher("jsp/uploadResult.jsp").forward(request, response);
 }
 

SmartUpload组件:

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  request.setCharacterEncoding("utf-8");
  response.setContentType("text/html;charset=utf-8");
  
  //上传文件存储路径
  String path = request.getSession().getServletContext().getRealPath("/") + "upload\\";
  
  SmartUpload smtUpload = new SmartUpload();
  smtUpload.setForcePhysicalPath(true);
  smtUpload.initialize(this.getServletConfig(), request, response);
  
  //设置上传的每个文件的大小(10M) //这个能限制单个文件的大小
  smtUpload.setMaxFileSize(1024*1024*10);
  //设置上传的所有文件总大小(30M)
  smtUpload.setTotalMaxFileSize(1024*1024*10*3);
  //设置允许上传文件的格式
  smtUpload.setAllowedFilesList("jpg,gif,png,jpeg,bmp,JPG,GIF,PNG,JPEG,BMP,zip,rar,exe");
  
//  try {
//   //或者设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,jsp,htm,html,js扩展名的文件和没有扩展名的文件。
//   smtUpload.setDeniedFilesList("exe,bat,jsp,htm,html,js,,");
//  } catch (Exception e) {
//   e.printStackTrace();
//   request.setAttribute("errorInfo","禁止上传exe,bat,jsp,htm,html,js类型和空类型的文件");
//   request.getRequestDispatcher("jsp/error.jsp").forward(request,response);
//   return;
//  }
  try {
   smtUpload.upload(); //文件类型错误,文件大小错误的异常都是在这抛出的.
  } catch (Exception e){
   e.printStackTrace();
   request.setAttribute("errorInfo","文件上传错误,请检查上传的文件类型和大小");
   request.getRequestDispatcher("jsp/error.jsp").forward(request,response);
   return;
  }
  
  String fileName = "",fieldName="",contentType="";
  //上传文件
   for (int i = 0; i < smtUpload.getFiles().getCount(); i++) {
    com.jspsmart.upload.File file = smtUpload.getFiles().getFile(i);
    
    //如果该文件不为空
    if (!file.isMissing()) {
     fieldName = file.getFieldName();
     contentType=file.getContentType();
     try {
      fileName = file.getFileName();
       String suffix = fileName.substring(fileName.lastIndexOf("."),fileName.length());
      String newFileName = System.currentTimeMillis() + suffix;//产生新的文件名
      System.out.println(path+newFileName);
      //保存文件
      file.saveAs(path + newFileName);
    } catch (Exception e) {
     e.printStackTrace();
     request.setAttribute("errorInfo","文件上传错误,请检查上传的文件类型");
     request.getRequestDispatcher("jsp/error.jsp").forward(request,response);
     return;
    }
    }
   }
   request.setAttribute("fieldName",fieldName);
  request.setAttribute("fileName",fileName);
  request.setAttribute("contentType",contentType);
   request.getRequestDispatcher("jsp/uploadResult.jsp").forward(request, response);
 }
  

upload.jsp:
<form action="<%=basePath %>/xxx.do" enctype="multipart/form-data" method="post">
   上传文件:<br />
   <input type="file" name="Upload1" contenteditable="false" />
   <br /><br />
   <input type="file" name="Upload2" contenteditable="false" />
   <br /><br />
   <input type="file" name="Upload3" contenteditable="false" />
   <br /><br />
   <input type="submit" value="上传" />
  </form>
 


四、通过字节流实现文件上传

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        java.io.InputStream is = request.getInputStream();
        java.io.FileOutputStream fos = new java.io.FileOutputStream("d:\\out.txt");
        
        byte[] buffer = new byte[8192];
        int count = 0;
        while((count = is.read(buffer)) >0)
        {
            fos.write(buffer, 0, count);
        }        
        fos.close();
    }
 

五、使用apache commons-io的FileUtils.copyFile简单地复制文件

用一般的方法,我们要复制一个文件,可能需要读取源文件,生成流对象,再写入一个新的文件中,使用apache commons-io很容就可以处理文件的复制。

下面的例子演示我们怎样使用FileUtils.copyFile方法在同一个文件夹复制文件和使用FileUtils.copyFileToDirectory方法复制到指定的文件夹中。其中System.getProperty("java.io.tmpdir")为通过JVM读取java.io.tmpdir属性取得临时文件夹,每种操作系统有所不同,Windows一般是C:\DOCUME~1\用户~1\LOCALS~1\Temp,Solaris一般是:/var/tmp/,Linux和Mac OS X一般是:/tmp,Windows的java.io.tmpdir属性值可以看环境变量->用户变量中的TMP。

当然我们一般使用的是绝对或相对路径,如要复制到F:\ajava目录中,我们只需将targetDir改成File targetDir = new File("F:\\ajava");运行后就可以看到结果。

package ajava.sample.apache;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class AjavaFileCopyExample {
    public static void main(String[] args)
    {
        // 源File对象
        File source = new File("ajava.txt");
        
        // 备份的File对象
        File target = new File("ajava-backup.txt");
        
        //通过JVM读取java.io.tmpdir属性取得临时文件夹
        File targetDir = new File(System.getProperty("java.io.tmpdir"));
        
        try
        {
            //在同一个文件夹复制文件
            System.out.println("复制 " + source + " 文件到 " + target);
            FileUtils.copyFile(source, target);
            
            // 根据指定的文件夹复制
            System.out.println("复制 " + source + " 文件到" + targetDir + "目录");
            FileUtils.copyFileToDirectory(source, targetDir);
        } catch (IOException e)
        {
            // Errors will be reported here if any error occures during copying
            // the file
            e.printStackTrace();
        }
    }
}
 
 
输出结果为:
复制 ajava.txt 文件到 ajava-backup.txt
复制 ajava.txt 文件到C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp目录
再查看对应的文件夹,就可以发现备份文件。

六、struts2的文件上传

http://bbs.chinaunix.net/thread-1845099-1-1.html
分享到:
评论

相关推荐

    java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类

    java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件上传工具类java 文件...

    java文件异步上传

    Java文件异步上传是一种在Web应用中常见的技术,它允许用户在不阻塞浏览器界面的情况下上传文件。这种技术尤其在处理大文件或者批量上传时,能够显著提升用户体验,因为它们不会冻结页面,允许用户继续与应用程序...

    java文件上传程序

    3. 文件上传协议:Java 文件上传程序使用 TCP 协议来实现文件上传功能。在服务器端,我们需要读取客户端上传的文件,并将其保存到指定的目录。 知识点:TCP 协议、文件上传协议 4. 文件读取和写入:Java 文件上传...

    java 文件上传工具类 java 文件上传工具类

    java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java ...

    Java实现文件与图片的上传下载---三种方式

    SmartUpload是一个Java上传组件,它简化了文件上传的处理过程。在JSP页面中,我们可以使用SmartUpload提供的标签库来创建上传界面。在Servlet中,初始化SmartUpload对象,调用其`upload()`方法解析上传请求,然后...

    java图形化实现文件上传_javagui上传文件,gui编写上传下载文件功能-Java文档类资源

    利用java图形化界面和网络编程相结合实现的--文件上传。 运行步骤: (1)分别运行工程两个包中的两个.java文件(UploadClient.java和UploadServer.java)分别会弹出“上传客服端”和“上传服务器”两个窗口。 ...

    性能最好的Java文件上传组件

    "性能最好的Java文件上传组件"是指一种优化了上传速度和资源消耗的工具,它能够有效地处理大文件上传、多文件并发上传等问题,提高应用的用户体验。在这个场景中,我们提到了基于"COS"的Java文件上传组件。COS通常指...

    java实现上传文件类型检测过程解析

    Java 实现上传文件类型检测过程解析是指在进行文件上传时,对上传文件的格式进行控制,以防止黑客将病毒脚本上传。单纯的将文件名的类型进行截取的方式非常容易遭到破解,上传者只需要将病毒改换文件名便可以完成...

    基于JAVA文件上传

    在Java编程语言中,文件上传是一项常见的功能,广泛应用于各种Web应用中,如社交媒体平台、云存储服务等。实现基于Java的文件上传涉及到多个技术点,包括Servlet、HTTP协议、多部分请求(Multipart Request)以及...

    java多文件上传

    首先,我们来看“java文件上传”这个知识点。Java提供了多种方法来处理文件上传,最常见的是使用Servlet API中的Part接口,这是Java EE 7引入的,专门用于处理multipart/form-data类型的HTTP请求,也就是通常用于...

    java实现文件批量上传

    3. `Java服务端代码`:处理文件上传的Servlet或Controller,负责接收请求、解析文件并保存到服务器。 4. `CSS样式文件`:定义了上传界面的样式,使界面更加美观。 5. `HTML模板`:可能包含了SWF和EXT的初始化代码,...

    文件上传的三种方式-Java

    2项目为实现文件上传的三种方式的源码,详细说明见我的博客。 jsp_upload-servlet项目:(1).Jsp/servlet 实现文件上传 (2).模拟Post请求/servlet 实现文件上传 jetty_upload-springmvc项目:(3).模拟Post请求/...

    Java 上传文件到 SharePoint

    在实际开发中,你还需要考虑错误处理和异常捕获,确保在文件上传过程中遇到问题时能够妥善处理。此外,如果SharePoint的访问控制较为严格,可能需要使用ADAL(Active Directory Authentication Library)来获取访问...

    java文件上传dome

    本示例("java文件上传dome")聚焦于使用Tomcat中的Servlet和Apache Commons FileUpload库来实现这一功能。以下是这个示例中涉及的关键知识点: 1. **Servlet**: Servlet是Java EE中用于扩展服务器功能的Java类。...

    java文件上传源码

    总的来说,这个源码包提供了从客户端文件选择、HTTP上传、服务器端接收、文件保存到服务器的完整流程,是学习和理解Java文件上传功能的好例子。通过深入研究和实践,开发者可以掌握文件上传这一核心的Web开发技能。

    java文件上传组件包

    "java文件上传组件包"正是这样一套工具集,旨在简化Java开发中的文件上传流程。 在Java中处理文件上传,主要涉及以下知识点: 1. **Servlet API**:在服务器端,Servlet API是处理HTTP请求的基础。`javax.servlet....

    java上传文件jar

    这两个库提供了强大的文件操作和文件上传功能,是Java开发者处理文件上传问题的得力助手。 首先,`commons-io-2.5.jar`是Apache Commons IO库的一部分,这是一个用于处理输入/输出操作的Java库。它提供了许多实用...

    java多文件上传实现

    在Java开发中,多文件上传是一项常见的功能,尤其在Web应用中,用户可能需要一次性上传多个文件,如图片、文档等。本知识点将详细介绍如何在Java中实现这一功能,以及结合Flash实现上传界面并显示上传进度条。 1. *...

    java文件上传方法

    ### Java文件上传方法详解 在Java开发中,文件上传是一个非常常见的需求,尤其是在Web应用程序中。本文将基于提供的代码片段,详细介绍如何使用Java实现文件上传功能,并解释代码中的关键部分。 #### 一、代码结构...

    java图形化实现文件上传

    (1)分别运行工程两个包中的两个.java文件(UploadClient.java和UploadServer.java)分别会弹出“上传客服端”和“上传服务器”两个窗口。 (2)单击“上传服务器”窗口中的“启动服务..”按钮。 (3)单击“上传...

Global site tag (gtag.js) - Google Analytics