`
茴香豆
  • 浏览: 132354 次
  • 性别: Icon_minigender_2
  • 来自: 桂林
社区版块
存档分类
最新评论
阅读更多

1.文件上传的jsp页面

<body>
<!--multipart/form-data:不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。  -->
<!-- 所谓不对字符编码:要是是上传文件,就是不对文件内容进行编码 -->
 <center>
<form name="fileupload" action="FileAction" method="POST" enctype="multipart/form-data">
 文件上传:<input  id="fileup1" name="fileup1" size="30" type="file" />
 <p></p>
 文件上传:<input  id="fileup2" name="fileup2" size="30" type="file" />
 <p></p>
 文件上传:<input  id="fileup3" name="fileup3" size="30" type="file" />
 <p></p>
  <input type="submit" name="file_sub" id="file_sub" value="上传"/>
 </form>
  </center>
</body>

 

2.web.xml文件配置

 

<servlet>
    <description></description>
    <display-name>FileAction</display-name>
    <servlet-name>FileAction</servlet-name>
    <servlet-class>testFileup.FileAction</servlet-class>
    <init-param>
      <param-name>uploadfilepath</param-name>
      <param-value>upload</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>FileAction</servlet-name>
    <url-pattern>/FileAction</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>FileDownLoad</display-name>
    <servlet-name>FileDownLoad</servlet-name>
    <servlet-class>testFileup.FileDownLoad</servlet-class>
    <init-param>
      <param-name>uploadfilepath</param-name>
      <param-value>upload</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>FileDownLoad</servlet-name>
    <url-pattern>/FileDownLoad</url-pattern>
  </servlet-mapping>

 

 

 

 3.文件上传部分(用的是org.apache.commons.fileupload)

 

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		  
		//得到servlet配置中文件上传的路径
		String path=this.getInitParameter("uploadfilepath");
		path=this.getServletContext().getRealPath("/")+path;//获得文件存放的物理路径
		//path=request.getContextPath()+"\\"+path;
		System.out.println("文件存放的物理路径:"+path);
		//System.out.println("文件内容:"+(String)request.getParameter("fileup1"));
		//是否上传成功
		boolean state=false;
		java.util.List<File> files=new java.util.ArrayList();
		  
		try{
			//创建一个基于磁盘文件的工厂
			DiskFileItemFactory factory=new DiskFileItemFactory();
			//setRepository:Sets the directory used to temporarily store files that are larger than the configured size threshold. 
			factory.setRepository(new File(path));
			//setSizeThreshold:Sets the size threshold beyond which files are written directly to disk. 
			factory.setSizeThreshold(10);
			//创建一个文件处理器
			ServletFileUpload upload=new ServletFileUpload(factory);
			//解析请求
		    //Processes an RFC 1867 compliant multipart/form-data stream. 
			List items=upload.parseRequest(request);
			//处理文件上传项
			//Iterator iter=items.iterator();
			//while(iter.hasNext()){
			for(int i=0;i<items.size();i++){
				
				//FileItem:This class represents a file or form item that was received within a multipart/form-data POST request. 
				//FileItem item=(FileItem)iter.next();
				FileItem item=(FileItem)items.get(i);
				if(item.isFormField()){
					//true if the instance represents a simple form field;
					//普通请求,可以接受请求中的其他参数
				}else{
					//文件上传请求
					//获得文件上传名
					String filename=item.getName();
					//filename在IE浏览器获得是具体的文件上传的物理地址,如C:\Documents and Settings\lilang\桌面\5单元-javaWEB开发-13\14.实战报表:jFreeChart,cewolf,iText,jExcel.doc
					//在firefox获得的是文件的名字,如:2.JSTL应用讲解.doc
					System.out.println("文件全名:"+filename);
					if(!filename.equals("")){
					int count=filename.lastIndexOf("\\");
					if(count>0){
						filename=filename.substring(count);
					}else{
						filename="\\"+filename;
					}
					File temf=new File(path+filename);
					System.out.println("保存的路径为:"+temf.getAbsolutePath());
					//将文件写入服务器的目录上
					item.write(temf);
					files.add(temf);
					state=true;
					}
				}
				
				
			}
		}catch(Exception ep){
			ep.printStackTrace();
			
		}
		
		response.setContentType("text/html;charset=gbk");
		PrintWriter out=response.getWriter();
		if(state){
		while(files.size()>0){
			File file=files.remove(0);
			String filePath=file.getParentFile().getName()+"/"+file.getName();
			System.out.println("连接的文件路径:"+filePath);
			//out.println("<br><a href=\""+filePath+"\">"+file.getName()+"</a>");//不以io输出流来下载文件,直接在浏览器打开			
			String filename=file.getName();
			System.out.println("FileAction--文件名:"+filename);			
			out.println("<br><a href=\"FileDownLoad?filename="+filename+"\">"+file.getName()+"</a>");
			
		}// end while
		
		
		
		}
		

 4.文件下载部分

 

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("GB2312");

		String filename=request.getParameter("filename");
		filename=new String(filename.getBytes("ISO-8859-1"));
		System.out.println("获得的文件名:"+filename);
		//filename=URLDecoder.decode(filename,"UTF-8");
		//System.out.println("文件名:"+filename);
		String filePath=this.getServletContext().getRealPath("/")+this.getInitParameter("uploadfilepath")+"\\"+filename;
		System.out.println("要下载的文件物理路径:"+filePath);
		 response.reset();//可以加也可以不加
	      response.setContentType("application/x-download");
	      String filedownload =filePath;//提供下载的文件的物理路径
	      String filedisplay = filename;//文件下载路径
	      filedisplay =URLEncoder.encode(filedisplay,"UTF-8");
	      response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);

	      ServletOutputStream outp = null;
	      FileInputStream in = null;
	      try
	      {
	          outp = response.getOutputStream();
	          in = new FileInputStream(filedownload);

	          byte[] b = new byte[in.available()];
	          int t = 0;

	          while((t= in.read(b)) > 0)
	          {
	              outp.write(b, 0, t);
	          }
	          outp.flush();
	      }
	      catch(Exception e)
	      {
	          System.out.println("Error!");
	          e.printStackTrace();
	      }
	      finally
	      {
	          if(in != null)
	          {
	              in.close();
	              in = null;
	          }
	          if(outp != null)
	          {
	              outp.close();
	              outp = null;
	          }
	      }
	}
分享到:
评论

相关推荐

    多文件上传 源码

    综上所述,这个"多文件上传 源码"涵盖了文件选择、读取、包装、异步上传、进度追踪、暂停/取消、错误处理等多个环节,是构建高效、用户友好的文件上传功能的重要参考资料。对于开发者来说,理解并掌握这些技术细节,...

    php文件上传源码

    PHP文件上传源码主要涉及以下几个关键知识点: 1. **表单设计**:在HTML中,我们需要一个`&lt;form&gt;`元素来允许用户选择要上传的文件。关键属性包括`enctype="multipart/form-data"`(用于文件上传)和`method="post"`...

    大文件上传源码

    "大文件上传源码"是一个解决方案,它允许用户上传超大文件,并且在上传过程中显示进度条,提高了交互性和用户体验。 首先,我们需要理解文件上传的基本原理。传统的HTTP协议在上传大文件时,如果文件超过服务器或...

    带进度条大文件上传源码(单文件多文件都可以传) v2.0.rar

    【标题】"带进度条大文件上传源码(单文件多文件都可以传) v2.0.rar" 提供的是一个基于.Net技术实现的文件上传解决方案,特别针对大文件和批量文件上传进行了优化,并且带有进度条显示,为用户提供更好的交互体验。...

    JQuery多文件上传源码

    标题中的“JQuery多文件上传源码”表明我们要讨论的是使用jQuery库实现的,能够处理多个文件同时上传的功能。在Web开发中,多文件上传是一个常见的需求,它允许用户一次性选择并上传多个文件,提高了用户体验。 **...

    html+javascript文件上传源码

    网页上传文件源码,可设置需要上传的文件个数,可设置上传目录,个人感觉很好用,分享下~

    asp单文件、多文件上传源码

    asp单文件、多文件上传源码 complex 文本文件混合上传示例 muti 多文件上传 single 单文件上传 其中muti包含两种方法上传,index.asp-多文件单个保存;index2.asp多文件循环保存 详细说明见Jo.Upload.pdf 本版本...

    文件上传源码 客户端服务端

    在这个场景下,"文件上传源码 客户端服务端" 提供了实现这一功能的代码示例,包括客户端和服务端两部分,使用的技术有Socket和HTTPClient。 首先,让我们详细探讨客户端部分。在"FileUploadExample"中,客户端通常...

    多文件上传源码

    本项目提供的是一个基于ASP.NET和C#的多文件上传源码,旨在帮助开发者理解和实现这一功能。 ASP.NET是由微软开发的一种服务器端Web应用程序框架,它允许开发者使用.NET Framework编写动态网页。C#是一种现代化的、...

    asp文件上传源码

    在ASP文件上传源码中,我们通常会涉及到以下几个关键知识点: 1. **HTTP POST请求**:文件上传实际上是客户端通过HTTP协议的POST方法将文件数据发送到服务器的过程。在ASP中,我们通常使用Request对象来捕获POST...

    多文件上传源码.rar

    本文将深入解析“多文件上传源码.rar”所提供的资源,帮助初学者理解如何在.NET环境下实现多文件上传功能。 标题中的“多文件上传源码”指的是一个支持一次性上传多个文件的代码实现,这对于提升用户体验至关重要,...

    bootstrap多文件上传源码.rar

    bootstrap多文件上传源码 源码描述: 一、源码特点 1、这是基于bootstrap多文件上传的demo,支持chrome,Firefox有兴趣的朋友可以下载,采用.net开发 二、注意事项 1、开发环境为Visual Studio 2013,使用.net 4.0...

    [上传下载]带进度条大文件上传源码(单文件多文件都可以传)_uploaddemo.zip源码ASP.NET网站源码打包下载

    [上传下载]带进度条大文件上传源码(单文件多文件都可以传)_uploaddemo.zip源码ASP.NET网站源码打包下载[上传下载]带进度条大文件上传源码(单文件多文件都可以传)_uploaddemo.zip源码ASP.NET网站源码打包下载[上传...

    6种经典的asp上传文件源码+带进度条

    本资源包含六种经典的ASP文件上传源码,且这些源码都支持文件上传进度条显示,提升了用户体验,让用户可以实时了解文件上传的进度。 1. 文件上传原理: ASP文件上传主要是通过HTML表单中的`&lt;input type="file"&gt;`...

    bootstrap多文件上传源码

    Bootstrap多文件上传是一种常见的网页交互功能,用于在网站上实现用户一次性上传多个文件。这个示例项目是基于流行的前端框架Bootstrap构建的,旨在提供一个在Chrome和Firefox浏览器中可用的多文件上传解决方案。...

    Silverlight文件上传源码

    Silverlight文件上传源码 Silverlight上传工具支持多文件上传,上传之前预览图片窗口可以调整图片大小,独立进度和整体进度显示,快速上传,ASP.NET服务器控件,并且可以非常灵活的改变程序根据自己的需求。 不同于...

    asp.net大文件上传源码

    本文将深入探讨ASP.NET实现大文件上传的原理、相关技术以及提供的源码解析。 首先,ASP.NET是一种微软公司开发的用于构建动态网站、web应用程序和web服务的框架。在ASP.NET中,上传文件主要依赖于`...

    ASP文件上传源码

    ASP文件上传源码是Web开发中的一个重要组成部分,主要用于在服务器端接收用户通过浏览器上传的文件。这个源码不仅包含了文件上传的功能,还额外提供了文件删除的特性,支持多个文件同时上传,大大增强了用户体验。在...

    [上传下载]多文件上传源码_mutifileupload.zip源码ASP.NET网站源码打包下载

    [上传下载]多文件上传源码_mutifileupload.zip源码ASP.NET网站源码打包下载[上传下载]多文件上传源码_mutifileupload.zip源码ASP.NET网站源码打包下载[上传下载]多文件上传源码_mutifileupload.zip源码ASP.NET网站...

Global site tag (gtag.js) - Google Analytics