栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

Servlet实现文件上传,可多文件上传示例

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Servlet实现文件上传,可多文件上传示例

一、Servlet实现文件上传,需要添加第三方提供的jar包

下载地址:

1) commons-fileupload-1.2.2-bin.zip:  点击打开链接

2)  commons-io-2.3-bin.zip:    点击打开链接 

接着把这两个jar包放到 lib文件夹下:

二:文件上传的表单提交方式必须是POST方式,

编码类型:enctype="multipart/form-data",默认是 application/x-www-form-urlencoded

比如:

     
  
 

2.实际处理文件上传的 FileUpLoad.java

package comservletfileupload; 
import javaioFile; 
import javaio*; 
import javaioIOException; 
import javaioPrintWriter; 
import javautilList;  
import javaxservletServletException; 
import javaxservlethttpHttpServlet; 
import javaxservlethttpHttpServletRequest; 
import javaxservlethttpHttpServletResponse; 
import orgapachecommonsfileuploadFileItem; 
import orgapachecommonsfileuploadFileUploadException; 
import orgapachecommonsfileuploaddiskDiskFileItemFactory; 
import orgapachecommonsfileuploadservletServletFileUpload; 
 
 
public class FileUpLoad extends HttpServlet { 
 
  public void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     
    requestsetCharacterEncoding("utf-8"); //设置编码 
     
    //获得磁盘文件条目工厂 
    DiskFileItemFactory factory = new DiskFileItemFactory(); 
    //获取文件需要上传到的路径 
    String path = requestgetRealPath("/upload"); 
     
    //如果没以下两行设置的话,上传大的 文件 会占用 很多内存, 
    //设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同 
     
    factorysetRepository(new File(path)); 
    //设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室 
    factorysetSizeThreshold(1024*1024) ; 
     
    //高水平的API文件上传处理 
    ServletFileUpload upload = new ServletFileUpload(factory); 
     
     
    try { 
      //可以上传多个文件 
      List list = (List)uploadparseRequest(request); 

      for(FileItem item : list) 
      { 
 //获取表单的属性名字 
 String name = itemgetFieldName(); 
  
 //如果获取的 表单信息是普通的 文本 信息 
 if(itemisFormField()) 
 {    
   //获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的 
   String value = itemgetString() ; 
    
   requestsetAttribute(name, value); 
 } 
 //对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些 
 else 
 { 
    
   //获取路径名 
   String value = itemgetName() ; 
   //索引到最后一个反斜杠 
   int start = valuelastIndexOf("\"); 
   //截取 上传文件的 字符串名字,加1是 去掉反斜杠, 
   String filename = valuesubstring(start+1); 
    
   requestsetAttribute(name, filename); 
    
   //真正写到磁盘上 
   //它抛出的异常 用exception 捕捉 
    
   //itemwrite( new File(path,filename) );//第三方提供的 
    
   //手动写的 
   OutputStream out = new FileOutputStream(new File(path,filename)); 
    
   InputStream in = itemgetInputStream() ; 
    
   int length = 0 ; 
   byte [] buf = new byte[1024] ; 
    
   Systemoutprintln("获取上传文件的总共的容量:"+itemgetSize()); 
 
   // inread(buf) 每次读到的数据存放在  buf 数组中 
   while( (length = inread(buf) ) != -1) 
   { 
     //在  buf 数组中 取出数据 写到 (输出流)磁盘上 
     outwrite(buf, 0, length); 
      
   } 
    
   inclose(); 
   outclose(); 
 } 
      } 



    } catch (FileUploadException e) { 
      // TODO Auto-generated catch block 
      eprintStackTrace(); 
    } 
    catch (Exception e) { 
      // TODO Auto-generated catch block 

      //eprintStackTrace(); 
    } 
     
     
    requestgetRequestDispatcher("filedemojsp")forward(request, response); 
     
 
  } 
 
} 

System.out.println("获取上传文件的总共的容量:"+item.getSize()); 

3.filedemo.jsp

<%@ page language="java" import="javautil*" pageEncoding="UTF-8"%> 
<% 
String path = requestgetContextPath(); 
String basePath = requestgetScheme()+"://"+requestgetServerName()+":"+requestgetServerPort()+path+"/"; 
%> 
 
 
 
  
   
   
  My JSP 'filedemojsp' starting page 
   
   
   
     
   
   
   
 
  
  
  
   
  用户名:${requestScopeusename } 
文件:${requestScopefile1 }
${requestScopefile2 }
" />

4结果页面:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/92232.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号