<!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");
InputStream fileSourceStream = request.getInputStream();
String tempFileName = "F:/tempFile";
File tempFile = new File(tempFileName);
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;
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()){
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