`

文件上传下载的简单实现

    博客分类:
  • J2EE
阅读更多

<%@page language="java" pageEncoding="UTF-8"%>
<%@page import="java.util.ArrayList"%>
<%@page import="org.apache.commons.fileupload.DiskFileUpload"%>
<%@page import="java.util.List"%>
<%@page import="java.util.Iterator"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.io.InputStream"%>
<%@page import="java.io.FileOutputStream"%>
<%@page import="java.util.Calendar"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.Hashtable"%>
<%@page import="java.io.File"%>
<%@page import="java.io.OutputStream"%>
<%@page import="java.io.BufferedInputStream"%>
<%@page import="java.io.FileInputStream"%>
<%!	
	public static String getFileName(){		
		Calendar cal = Calendar.getInstance();
		return cal.getTimeInMillis()+"";
	}
%>
<%
	String dir = "upload";
	Map<String,String> filemaps = (Map<String,String>)request.getSession().getServletContext().getAttribute("filemaps");
	if(filemaps==null){
		filemaps = new Hashtable<String,String>();
		request.getSession().getServletContext().setAttribute("filemaps",filemaps);
	}


	//try{
		if("up".equals(request.getParameter("action"))){
			List<String> errfiles = new ArrayList<String>();
			DiskFileUpload fileupload = new DiskFileUpload();
			fileupload.setHeaderEncoding("GBK");
			fileupload.setSizeMax(1500 * 1024); 
			fileupload.setSizeThreshold(1500 * 1024); 
			List fileItems = fileupload.parseRequest(request); 
			Iterator iter = fileItems.iterator();
			while (iter.hasNext()) {
				FileItem item = (FileItem) iter.next();
				if (!item.isFormField()) { 
					String name =item.getName();
					String savename = getFileName();
					
					
					int indx = name.lastIndexOf(".");
					String suffix = name.substring(indx);//从n开始到结束,即取出后缀名
					filemaps.put(savename+suffix,new String(name.getBytes("gbk"),"utf-8"));
					
					InputStream istream = item.getInputStream();
					String path = request.getSession().getServletContext().getRealPath(dir);
					try{						
						File f = new File(path+"\\"+savename+suffix);
						f.createNewFile();					
						FileOutputStream fout = new FileOutputStream(path+savename+suffix);
						byte buffer[] = new byte[8192];
						int count = 0;
						while ((count = istream.read(buffer)) > 0) {
							fout.write(buffer, 0, count);
						}
						fout.close();
						item.delete(); 
						System.out.println("***************");
					}catch(Exception e){
						e.printStackTrace();
						errfiles.add(filemaps.get(savename));
						filemaps.remove(savename);
					}		
					
					request.setAttribute("errfiles",errfiles);
				}			
			}			
		}
		
	//}catch(Exception e){
	//	e.printStackTrace();
	//}	
		if("delete".equals(request.getParameter("action"))){
			String filename = request.getParameter("filename");
			String path = request.getSession().getServletContext().getRealPath(dir);
			File f = new File(path+"\\"+filename);
			f.delete();
			System.out.println("_________:"+filemaps.size());
			filemaps.remove(filename);			
			System.out.println(filemaps);
			request.getSession().getServletContext().setAttribute("filemaps",filemaps);
		}
		
		if("load".equals(request.getParameter("action"))){
			OutputStream os = null;
			InputStream istream = null;
			BufferedInputStream bis = null;
			String filename = request.getParameter("filename");
			try {
				os = response.getOutputStream();
				response.reset();
				response.setHeader("Content-disposition", "attachment; filename="	+ filename);
				response.setContentType("application/javascript");
				String path = request.getSession().getServletContext().getRealPath(dir);
				istream = new FileInputStream(path+filename);
				bis = new BufferedInputStream(istream);
		      	byte data[] = new byte[1024];
		      	int size = 0;
		      	size = bis.read(data);
		      	while(size!=-1){
		        	os.write(data);
		        	size = bis.read(data);
		      	}
		    }catch(Exception expt){
		      expt.printStackTrace();
		    }finally{
		      try {
			        if (bis != null) {
			          bis.close();
			        }
			        if (istream != null) {
			        	istream.close();
			        }
			        if (os != null) {
			          os.close();
		        	}
		      	} catch (Exception ex) {
		        	ex.printStackTrace();
		      	}
			}		
		}		
%>

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html;charset=GBK">
		<script language="javascript" type="text/javascript" >
			function deletefile(name){
				window.location.href="upload.jsp?action=delete&filename="+name;				
			}
			function downloadfile(name){
				window.location.href="upload.jsp?action=load&filename="+name;				
			}
		</script>
		<style type="text/css">
			body{
				font-size:13px;
			}
			table{
				font-size:13px;
			}
		</style>
	</head>
	<body>
		
		<div>
			<div>上传文件:</div>
			<form method="post" enctype="multipart/form-data" action="upload.jsp?action=up">
				<input type="file" name="file" />
				<input type="submit" value="确认" />
			</form>
			
		</div>
		<div>
			<div>文件详情:</div>
			<div>
				<table>
					<tbody>
						<%
							boolean flag = true;
							Map<String,String> files = (Map<String,String>)request.getSession().getServletContext().getAttribute("filemaps");
							if(files!=null&&files.size()!=0){
								flag=false;
								for(Map.Entry<String,String> m:files.entrySet()){								
						%>					
						<tr><td><span name="<%=m.getKey()%>"><%=m.getValue() %></span></td><td><a href="javascript:downloadfile('<%=m.getKey()%>');" >下载</a>&nbsp;&nbsp;<a href="javascript:deletefile('<%=m.getKey()%>');" >删除</a></td></tr>
						<%						
								}
							}
							List<String> errfiles = (List<String>)request.getAttribute("errfiles");
							if(errfiles!=null&&errfiles.size()!=0){
								flag=false;
								for(String m:errfiles){		
						%>
											
						<tr><td><span><%=m%></span></td><td><span style="font:red;" >上传失败</span></td></tr>
						<%						
								}
							}
							
							if(flag){
						%>
							<tr><td><span>还未上传任何文件!</span></td></tr>
						<%	
							}
						%>
					</tbody>
				</table>
			</div>
		</div>
	</body>
</html>
 
分享到:
评论

相关推荐

    基于Python+Django简单实现文件上传下载功能源码.zip

    基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于...

    springboot+thymeleaf 文件上传下载功能实现

    以上是使用Spring Boot和Thymeleaf实现文件上传下载的基本步骤。通过这种方式,你可以构建一个简单的文件管理系统,允许用户上传和下载文件。在实际应用中,你可能还需要处理更多细节,如错误处理、日志记录、权限...

    SpringBoot实现文件上传和下载.docx

    总的来说,Spring Boot提供了一种简洁的方式来实现文件上传和下载功能,结合Thymeleaf和其他Spring组件,可以快速构建出功能完善的Web应用。通过合理的接口设计和实现,我们可以实现可扩展且易于维护的文件存储服务...

    struts2实现多文件上传下载

    需求 1.能够对多个文件进行上传(可以选择上传文件个...提供多文件上传,上传成功后,提供刚上传的文件下载功能(其他的都可以在其上面进行扩充) 多文件 上传 下载 随意文件 java Struts2 单例 配置 动态读取 李顺利

    SpringBoot实现文件上传和下载实现全过程(值得珍藏)

    下面是一个简单的文件上传和下载的代码示例: ```java @Controller public class FileUploadController { @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) ...

    javaweb简单实现文件上传与下载源代码

    总之,JavaWeb中的文件上传和下载涉及到多个环节,从客户端的表单提交到服务器端的处理和存储,再到客户端的下载,每个步骤都需要仔细设计和实现,确保系统的安全性和稳定性。提供的源代码可以作为一个基础模板,...

    servlet 文件上传下载例子

    在这个"Servlet 文件上传下载例子"中,我们将探讨如何使用Servlet实现文件的上传和下载功能,这对于构建一个简单的图片文件服务器至关重要。 1. **文件上传** - **MultipartRequest**: 在Servlet中,处理文件上传...

    jsp实现文件上传下载

    `SmartUpload`库提供的API可以方便地解决这些问题,使得文件上传下载功能的实现更加高效和稳定。 总结,通过学习和掌握JSP与`SmartUpload`库的使用,开发者可以轻松构建起一套完善的文件上传下载系统,为用户提供...

    struts与hibernate实现文件的上传与动态下载

    通过以上步骤,你可以实现一个基于Struts2和Hibernate的文件上传与动态下载系统。这个系统能够处理用户上传的文件,将其保存到服务器,同时提供动态下载功能,允许用户根据需要下载文件。在实际开发中,还需要考虑...

    文件上传下载需要的jar包 java文件上传下载

    9. **进度反馈与取消操作**: 对于用户体验,提供文件上传和下载的进度反馈以及取消操作的能力也是很重要的,这可以通过监听上传或下载的进度并更新UI来实现。 10. **文件存储策略**: 选择合适的文件存储策略,如...

    文件上传下载的实现-java代码

    在Java编程领域,文件上传和下载是Web应用中常见的功能,尤其在开发涉及用户交互的系统时,如文件管理系统、在线文档共享平台等。这里,我们将深入探讨如何使用Java实现文件的上传和下载。 首先,文件上传涉及到...

    文件上传下载服务器

    文件上传下载服务器是一种重要的网络服务,它为用户提供了一...用户可以通过它来搭建自己的文件上传下载服务器,实现类似学校教师收发作业的功能。在使用前,需要了解其基本操作和配置方法,以确保能正确地部署和使用。

    PHP 简单实现文件上传、保存、下载的功能(云盘)

    在本项目中,"PHP 简单实现文件上传、保存、下载的功能(云盘)",我们主要关注的是如何利用PHP构建一个基本的云存储服务,让用户能够在自己的账户空间内进行文件的操作。以下是对涉及的技术点的详细解释: 1. **PHP*...

    一个简单地文件管理系统,实现了文件的上传、下载、移动等功能

    一个简单地文件管理系统,实现了文件的上传、下载、移动等功能,支持大部分类型文件的预览,支持视频浏览,音乐播放等。。。一个个人文件管理系统的源码脚手架,r-pan基于此脚手架搭建,版本更新内容(更换了前端...

    Java版Linux文件上传下载、windows本地文件上传下载

    在Java编程环境中,实现Linux与Windows之间的文件上传和下载是一项常见的任务,特别是在分布式系统和跨平台应用中。本文将深入探讨如何使用Java技术实现在Linux和Windows之间进行文件的互传,以及创建一个HTML界面来...

    golang语言实现的文件上传与文件下载功能示例

    本文实例讲述了golang实现的文件上传与文件下载功能。分享给大家供大家参考,具体如下: upload.go 复制代码 代码如下:package common import (  “io/ioutil”  “os”  “path”  “github.com/gin-gonic/gin...

    winform实现FTP上传、下载、删除文件

    要实现FTP文件上传,我们首先创建一个`FtpWebRequest`对象,设置其方法为`WebMethod.UploadFile`,然后提供FTP服务器的URL、用户名和密码。接着,打开一个流写入器,将本地文件内容写入请求的主体,最后发送请求并...

    局域网文件上传下载工具

    总的来说,【局域网文件上传下载工具】简化了局域网内的文件交互过程,通过Web技术实现跨平台的兼容性,让文件共享变得快速、简单且高效。无论是工作中的项目文件传递,还是家庭成员间的照片分享,都是一个值得信赖...

    PHP文件上传和下载

    在PHP中,文件上传和下载是两个非常重要的功能,它们在Web开发中有着广泛的应用,例如用户上传头像、分享文件或下载资源等。本文将详细介绍如何使用PHP实现这两个功能。 首先,我们从文件上传开始。PHP提供了`$_...

Global site tag (gtag.js) - Google Analytics