您的位置:首页 > 其它

SmartUpload组件实现文件上传,文件下载,打包下载。

2018-03-13 22:02 495 查看

jsp页面部分

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
<!-- jsp 页面部分 -->
<!-- 文件上传时必须要设置表单的enctype="multipart/form-data"
让表单中的数据以二进制的方式提交,在servlet中以字节流获取

-->
<!--
<h1>使用jsp+servlet进行文件上传和下载</h1>
<form action="/fileUpload/UploadFile" method="post" enctype="multipart/form-data">
请选择图片:<input id="myfile" name="myfile" type="file" />
<input type="submit" value="提交"  />${result}
</form>
下载:<a href="/fileUpload/DownloadServlet?filename=01.txt">01.txt</a>
-->

<!--
<hr>
<h1>使用SmartUpload组件实现文件上传和下载</h1>
<form action="/fileUpload/SmartFileUpload" method="post" enctype="multipart/form-data">
请选择图片:<input  name="myfile" type="file" />
<input type="submit" value="提交"  />${result}
</form>
下载:<a href="/fileUpload/SmartFileDownload?filename=01.txt">01.txt</a>

-->

<hr>
<h1>使用SmartUpload组件批量下载文件,通过打包下载方式</h1>
<form action="/fileUpload/SmartFileDownloadMore" method="post">
图片一:<input name="file" type="checkbox" value="01.jpg" />    
图片二:<input name="file" type="checkbox" value="02.jpg" />    
图片三:<input name="file" type="checkbox" value="03.jpg" />    
图片四:<input name="file" type="checkbox" value="04.jpg" />    
<input type="submit" value="上传" />${more}
</form>
</body>
</html>

文件上传:

package com.fileupload;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class UploadServlet*/public class UploadServlet extends HttpServlet {public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doPost(req,resp);}/*** jsp+servlet文件上传* 思路:通过request.getInputStream()获取表单的流信息,然后FileOutputStream写到临时文件,然后截取所需要的字节*/public void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {/*** 第一步:* 通过request.getInputStream()获取表单的流信息* 然后通过FileOutputStream()保存到临时文件中*///从request当中获取流信息InputStream fileSource = req.getInputStream();String tempFileName = "E:/tempFile";//tempFile指向临时文件File tempFile = new File(tempFileName);//outputStram文件输出流指向这个临时文件FileOutputStream outputStream = new FileOutputStream(tempFile);byte b[] = new byte[1024];int n;while(( n = fileSource.read(b)) !4000= -1){outputStream.write(b, 0, n);}//关闭输出流、输入流outputStream.close();fileSource.close();/*** 第二步:* 通过RanomAccessFile 流读取第二行,来截取文件名*///获取上传文件的名称RandomAccessFile randomFile = new RandomAccessFile(tempFile,"r");randomFile.readLine();String str = randomFile.readLine();System.out.println(str);int beginIndex = str.lastIndexOf("\\") + 1;int endIndex = str.lastIndexOf("\"");String filename = str.substring(beginIndex, endIndex);System.out.println("filename:" + filename);//重新定位文件指针到文件头randomFile.seek(0);long startPosition = 0;int i = 1;//获取文件内容 开始位置while(( n = randomFile.readByte()) != -1 && i <=4){if(n == '\n'){startPosition = randomFile.getFilePointer();i ++;}}startPosition = randomFile.getFilePointer() -1;//获取文件内容 结束位置randomFile.seek(randomFile.length());long endPosition = randomFile.getFilePointer();int j = 1;while(endPosition >=0 && j<=2){endPosition--;randomFile.seek(endPosition);if(randomFile.readByte() == '\n'){j++;}}endPosition = endPosition -1;//设置保存上传文件的路径String realPath = "E:/图片";System.out.println(realPath);File fileupload = new File(realPath);if(!fileupload.exists()){fileupload.mkdir();}File saveFile = new File(realPath,filename);RandomAccessFile randomAccessFile = new RandomAccessFile(saveFile,"rw");//从临时文件当中读取文件内容(根据起止位置获取)randomFile.seek(startPosition);while(startPosition < endPosition){randomAccessFile.write(randomFile.readByte());startPosition = randomFile.getFilePointer();}//关闭输入输出流、删除临时文件randomAccessFile.close();randomFile.close();tempFile.delete();req.setAttribute("result", "上传成功!");RequestDispatcher dispatcher = req.getRequestDispatcher("jsp/FileUpload.jsp");dispatcher.forward(req, resp);}}

文件下载:

package com.fileupload;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class DownloadServlet*/public class DownloadServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** jsp+servlet文件下载* 思路:用FileInputStream读取下载的文件到内存,然后响应输出流让浏览器以附件的形式下载*/public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//需要下载的文件de路径String path = "E:/图片/";String filename = req.getParameter("filename");File file = new File(path + filename);if(file.exists()){resp.setContentType("application/x-msdownload");//设置相应类型application/octet-stream表示以附件的形式下载resp.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");//设置头信息InputStream inputStream = new FileInputStream(file);//以流的形式获取响应内容ServletOutputStream ouputStream = resp.getOutputStream();byte b[] = new byte[1024];int n ;while((n = inputStream.read(b)) != -1){ouputStream.write(b,0,n);}//关闭流、释放资源ouputStream.close();inputStream.close();}else{req.setAttribute("errorResult", "文件不存在下载失败!");RequestDispatcher dispatcher = req.getRequestDispatcher("jsp/FileUpload.jsp");dispatcher.forward(req, resp);}}public void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req,resp);}}

文件批量导包下载:

package com.fileupload;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class SmartFileDownloadMore*/public class SmartFileDownloadMore extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}/*** SmartUpload文件批量下载*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取下载的文件String url="E:/图片";String[] name=request.getParameterValues("file");//获取复选框中的值//设置响应的方式和头信息response.setContentType("application/x-msdownload");response.setHeader("Content-Disposition", "attachment;filename=test.zip");//设置zip附件的名字//将响应之后的输出流包装成zip输出流来输出ZipOutputStream zop=new ZipOutputStream(response.getOutputStream());for(String fileName:name){zop.putNextEntry(new ZipEntry(fileName));//为压缩包中的每一项命名//用文件字节输入流读取文件后,以zip输出流输出File file =new File(url+"/"+fileName);//创建文件字节输入流,将需要下载的文件读到内存FileInputStream fis=new FileInputStream(file);byte b[]=new byte[1024];int len=-1;while((len=fis.read(b))!=-1){zop.write(b, 0, len);}fis.close();}zop.close();//		request.setAttribute("more", "批量下载成功");//		request.getRequestDispatcher("jsp/FileUpload.jsp").forward(request, response);}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: