使用JSP+Servlet实现文件的上传下载上传

<!DOCTYPE html >
<html>
<head>
<meta charset="UTF-8">
<title>使用JSP+Servlet实现文件的上传下载</title>
</head>
<script type="text/javascript" src="js/jquery-1.11.1.js"></script>
<body>
    <h2>使用JSP+Servlet实现文件的上传下载</h2>
	<form action="uploadServlet" method="post" enctype="multipart/form-data" >
  	        请选择文件:<input id="file" name="file" type="file" />
  		<input type="submit" value="上传"  />${result}
  		**这里一定要注意,表单的method一定要使用post方式,其它的就很简单了,至于${result}这种语句是EL表达式。**
        </form>
  	下载:<a href="downloadServlet?filename=FileTest.txt">fileTest.txt</a> ${errorResult} 
</body>
</html>
package com.dw.servlet;
 
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;
 
public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public UploadServlet() {
        super();
    }
 
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request,response);
	}
 
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");//更改响应字符流使用的编码,还能告知浏览器用什么编码进行显示
		
		//从request中获取文本输入流信息
		InputStream fileSourceStream = request.getInputStream();
		String tempFileName = "F:/tempFile";
 
		//设置临时文件,保存待上传的文本输入流
		File tempFile = new File(tempFileName);
		
		//outputStram文件输出流指向这个tempFile
		FileOutputStream outputStream = new FileOutputStream(tempFile);
		
		//读取文件流
		byte temp[] = new byte[1024];
		int n;
		while(( n = fileSourceStream.read(temp)) != -1){
			outputStream.write(temp, 0, n);
		}
		outputStream.close();
		fileSourceStream.close();
		
		//获取上传文件的名称 
		RandomAccessFile randomFile = new RandomAccessFile(tempFile,"r");
		randomFile.readLine();  
		String str = randomFile.readLine();
		int start = str.lastIndexOf("=") + 2;
		int end = str.lastIndexOf("\"");
		String filename = str.substring(start, end);
		
		//定位文件指针到文件头
		randomFile.seek(0);
		long startIndex = 0;
		int i = 1;
		//获取文件内容的开始位置
		while(( n = randomFile.readByte()) != -1 && i <=4){
			if(n == '\n'){
				startIndex = randomFile.getFilePointer();
				i ++;
			}
		}
		startIndex = startIndex -1; //这里一定要减1,因为前面多读了一个,这里很容易忽略
		//获取文件内容结束位置
		randomFile.seek(randomFile.length());
		long endIndex = randomFile.getFilePointer();
		int j = 1;
		while(endIndex >=0 && j<=2){
			endIndex--;
			randomFile.seek(endIndex);
			if(randomFile.readByte() == '\n'){
				j++;
			}
		}
		
		//设置保存上传文件的路径
		String realPath =  "F:/file";
		File fileupload = new File(realPath);
		if(!fileupload.exists()){
			fileupload.mkdir();
		}
		File saveFile = new File(realPath,filename);
		RandomAccessFile randomAccessFile = new RandomAccessFile(saveFile,"rw");
		//根据起止位置从临时文件中读取文件内容
		randomFile.seek(startIndex);
		while(startIndex < endIndex){
			randomAccessFile.write(randomFile.readByte());
			startIndex = randomFile.getFilePointer();
		}
		//关闭输入输出流并 删除临时文件
		randomAccessFile.close();
		randomFile.close();
		tempFile.delete();
		
		request.setAttribute("result", "文件上传成功");
		RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
		dispatcher.forward(request, response);
	}
}
package com.dw.servlet;
 
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;
public class DownloadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public DownloadServlet() {
        super();
    }
 
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		
		//获取文件下载路径
		String path = "F:/file/";
		String filename = request.getParameter("filename");
		File file = new File(path + filename);
		if(file.exists()){
			//设置相应类型让浏览器知道用什么打开  用application/octet-stream也可以,看是什么浏览器
			response.setContentType("application/x-msdownload");
			//设置头信息
			response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
			InputStream inputStream = new FileInputStream(file);
			ServletOutputStream ouputStream = response.getOutputStream();
			byte b[] = new byte[1024];
			int n ;
			while((n = inputStream.read(b)) != -1){
				ouputStream.write(b,0,n);
			}
			//关闭流
			ouputStream.close();
			inputStream.close();
		}else{
			request.setAttribute("errorResult", "文件不存在,下载失败!");
			RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
			dispatcher.forward(request, response);
		}
	}
 
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request,response);
	}
 
}

https://github.com/zhanlong-dw/fileuploadanddownload

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值