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文件上传源码主要涉及以下几个关键知识点: 1. **表单设计**:在HTML中,我们需要一个`<form>`元素来允许用户选择要上传的文件。关键属性包括`enctype="multipart/form-data"`(用于文件上传)和`method="post"`...
"大文件上传源码"是一个解决方案,它允许用户上传超大文件,并且在上传过程中显示进度条,提高了交互性和用户体验。 首先,我们需要理解文件上传的基本原理。传统的HTTP协议在上传大文件时,如果文件超过服务器或...
【标题】"带进度条大文件上传源码(单文件多文件都可以传) v2.0.rar" 提供的是一个基于.Net技术实现的文件上传解决方案,特别针对大文件和批量文件上传进行了优化,并且带有进度条显示,为用户提供更好的交互体验。...
标题中的“JQuery多文件上传源码”表明我们要讨论的是使用jQuery库实现的,能够处理多个文件同时上传的功能。在Web开发中,多文件上传是一个常见的需求,它允许用户一次性选择并上传多个文件,提高了用户体验。 **...
网页上传文件源码,可设置需要上传的文件个数,可设置上传目录,个人感觉很好用,分享下~
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文件上传源码中,我们通常会涉及到以下几个关键知识点: 1. **HTTP POST请求**:文件上传实际上是客户端通过HTTP协议的POST方法将文件数据发送到服务器的过程。在ASP中,我们通常使用Request对象来捕获POST...
本文将深入解析“多文件上传源码.rar”所提供的资源,帮助初学者理解如何在.NET环境下实现多文件上传功能。 标题中的“多文件上传源码”指的是一个支持一次性上传多个文件的代码实现,这对于提升用户体验至关重要,...
bootstrap多文件上传源码 源码描述: 一、源码特点 1、这是基于bootstrap多文件上传的demo,支持chrome,Firefox有兴趣的朋友可以下载,采用.net开发 二、注意事项 1、开发环境为Visual Studio 2013,使用.net 4.0...
[上传下载]带进度条大文件上传源码(单文件多文件都可以传)_uploaddemo.zip源码ASP.NET网站源码打包下载[上传下载]带进度条大文件上传源码(单文件多文件都可以传)_uploaddemo.zip源码ASP.NET网站源码打包下载[上传...
本资源包含六种经典的ASP文件上传源码,且这些源码都支持文件上传进度条显示,提升了用户体验,让用户可以实时了解文件上传的进度。 1. 文件上传原理: ASP文件上传主要是通过HTML表单中的`<input type="file">`...
Bootstrap多文件上传是一种常见的网页交互功能,用于在网站上实现用户一次性上传多个文件。这个示例项目是基于流行的前端框架Bootstrap构建的,旨在提供一个在Chrome和Firefox浏览器中可用的多文件上传解决方案。...
Silverlight文件上传源码 Silverlight上传工具支持多文件上传,上传之前预览图片窗口可以调整图片大小,独立进度和整体进度显示,快速上传,ASP.NET服务器控件,并且可以非常灵活的改变程序根据自己的需求。 不同于...
本文将深入探讨ASP.NET实现大文件上传的原理、相关技术以及提供的源码解析。 首先,ASP.NET是一种微软公司开发的用于构建动态网站、web应用程序和web服务的框架。在ASP.NET中,上传文件主要依赖于`...
ASP文件上传源码是Web开发中的一个重要组成部分,主要用于在服务器端接收用户通过浏览器上传的文件。这个源码不仅包含了文件上传的功能,还额外提供了文件删除的特性,支持多个文件同时上传,大大增强了用户体验。在...
[上传下载]多文件上传源码_mutifileupload.zip源码ASP.NET网站源码打包下载[上传下载]多文件上传源码_mutifileupload.zip源码ASP.NET网站源码打包下载[上传下载]多文件上传源码_mutifileupload.zip源码ASP.NET网站...