上传下载
来源:互联网 发布:算法电子书 编辑:程序博客网 时间:2024/04/28 23:46
结构:
src
com.servletdemo
DownloadServlet.java
UploadServlet.java
webContent
files --文件夹
jsp
servlet
fileupload.jsp
WEB-INF
web.xml
lib
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
javax.servlet.jar
DownloadServlet
package com.servletdemo;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class DownloadServlet */@WebServlet("/servlet/DownloadServlet")public class DownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public DownloadServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub download1(request,response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } public void download1(HttpServletRequest request,HttpServletResponse response) throws IOException{ //获取所要下载文件的路径 String path = "D://ProgramFiles/files"; String fileName = request.getParameter("fileName"); if(fileName == null || "null".equals(fileName)){ path = getFile(path); }else{ path = path+"/"+fileName; } System.out.println("fileName="+fileName+"path = "+path); String realPath = path.substring(path.lastIndexOf("/")+1); //告诉浏览器是以下载的方法获取到资源 //告诉浏览器以此种编码来解析URLEncoder.encode(realPath, "utf-8")) response.setHeader("content-disposition","attachment; filename="+URLEncoder.encode(realPath, "utf-8")); //获取到所下载的资源 FileInputStream fis = new FileInputStream(path); int len = 0; byte [] buf = new byte[1024]; while((len=fis.read(buf))!=-1){ response.getOutputStream().write(buf,0,len); } } private static String getFile(String path){ // get file list where the path has File file = new File(path); // get the folder list File[] array = file.listFiles(); String fileName = null; for(int i=0;i<array.length;i++){ if(array[i].isFile()){ // only take file name // System.out.println("^^^^^" + array[i].getName()); // take file path and name // System.out.println("#####" + array[i]); // take file path and name // System.out.println("*****" + array[i].getPath()); fileName = array[i].getPath(); break; }else if(array[i].isDirectory()){ // getFile(array[i].getPath()); break; } } return fileName; } public static void main(String[] args) { String name = getFile("D://ProgramFiles/files"); System.out.println("name="+name);}}
UploadServlet.java
package com.servletdemo;import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.text.DateFormat; import java.util.Date; import java.util.List; import java.util.UUID; import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.ProgressListener; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload;/** * Servlet implementation class UploadServlet */@WebServlet("/servlet/UploadServlet")public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; private String fileNames; /** * @see HttpServlet#HttpServlet() */ public UploadServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //设置编码 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter pw = response.getWriter(); try { //设置系统环境 DiskFileItemFactory factory = new DiskFileItemFactory(); //文件存储的路径 String storePath = "D://ProgramFiles/files"; String storePath = "D://ProgramFiles/files"; //判断传输方式 form enctype=multipart/form-data boolean isMultipart = ServletFileUpload.isMultipartContent(request); if(!isMultipart) { pw.write("传输方式有错误!"); return; } ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(20*1024*1024);//设置单个文件大小不能超过4M upload.setSizeMax(30*1024*1024);//设置总文件上传大小不能超过6M //监听上传进度 upload.setProgressListener(new ProgressListener() { //pBytesRead:当前以读取到的字节数 //pContentLength:文件的长度 //pItems:第几项 public void update(long pBytesRead, long pContentLength, int pItems) { System.out.println("已读去文件字节 :"+pBytesRead+" 文件总长度:"+pContentLength+" 第"+pItems+"项"); } }); //解析 List<FileItem> items = upload.parseRequest(request); for(FileItem item: items) { if(item.isFormField())//普通字段,表单提交过来的 { String name = item.getFieldName(); String value = item.getString("UTF-8"); System.out.println(name+"=="+value); }else { // String mimeType = item.getContentType(); 获取上传文件类型 // if(mimeType.startsWith("image")){ InputStream in =item.getInputStream(); String fileName = item.getName(); if(fileName==null || "".equals(fileName.trim())) { continue; } fileNames = fileName; System.out.println("fileNames="+fileNames); fileName = fileName.substring(fileName.lastIndexOf("\\")+1); // fileName = UUID.randomUUID()+"_"+fileName; //按日期来建文件夹 String newStorePath = makeStorePath(storePath); String storeFile = newStorePath+"\\"+fileName; OutputStream out = new FileOutputStream(storeFile); byte[] b = new byte[1024]; int len = -1; while((len = in.read(b))!=-1) { out.write(b,0,len); } in.close(); out.close(); item.delete();//删除临时文件 } } // } }catch(org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException e){ //单个文件超出异常 pw.write("单个文件不能超过4M"); }catch(org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException e){ //总文件超出异常 pw.write("总文件不能超过6M"); }catch (FileUploadException e) { e.printStackTrace(); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); response.sendRedirect("/Demo1/servlet/DownloadServlet?fileName="+fileNames); } private String makeStorePath(String storePath) { // Date date = new Date(); // DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM); // String s = df.format(date); // String path = storePath+"\\"+s; String path = storePath; File file = new File(path); if(!file.exists()) { file.mkdirs();//创建多级目录,mkdir只创建一级目录 } return path; } private String makeStorePath2(String storePath, String fileName) { int hashCode = fileName.hashCode(); int dir1 = hashCode & 0xf;// 0000~1111:整数0~15共16个 int dir2 = (hashCode & 0xf0) >> 4;// 0000~1111:整数0~15共16个 String path = storePath + "\\" + dir1 + "\\" + dir2; // WEB-INF/files/1/12 File file = new File(path); if (!file.exists()) file.mkdirs(); return path; } }
fileupload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Upload File Demo</title></head><body><form action="${pageContext.request.contextPath}/servlet/UploadServlet" method="post" enctype="multipart/form-data"> user name<input type="text" name="username"/> <br/> <input type="file" name="f1"/><br/> <input type="file" name="f2"/><br/> <input type="submit" value="save"/> </form></body></html>
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Demo3</display-name> <welcome-file-list> <welcome-file>/jsp/servlet/fileupload.jsp</welcome-file> </welcome-file-list></web-app>
0 0
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- Android提醒微技巧,你真的了解Dialog、Toast和Snackbar吗?
- 资源图与死锁定理的灵活运用
- bzoj1039 [ZJOI2008]无序运动Movement AC自动机 计算几何
- Linux常用命令
- Java利用JDom解析和传递XML格式数据
- 上传下载
- .Net web提交到后台中文乱码问题解决
- Android之Manifest文件
- 安装qt qmake 错误:could not find a Qt installation of ''
- IO流
- MPI—聚集函数MPI_Gather()
- 10上机练习1
- 从MVC到前后端分离(Rest框架搭建)
- Android CountDownTimer带有动画的倒计时