文件上传
<form action="upload" enctype="multipart/form-data" method="post">
请选择文件:<input type="file" name="file">
<input type="submit" value="上传">
</form>
2.UploadServlet
/**
步骤:
1.request读取数据流并存储为临时文件
2.解析临时文件内容
由于读取的数据流不仅仅包含文件信息。
以上传内容为 hello 的 .txt 文件为例
临时文件的内容为:
-----------------------------2185749228913
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain
hello
-----------------------------2185749228913--
3.创建上传的文件
*/
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public UploadServlet() {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
InputStream in = request.getInputStream();
String tmpFileName = "E:/tempFile";
File tempFile = new File(tmpFileName);
FileOutputStream fileOutputStream = new FileOutputStream(tempFile);
byte tmp[] = new byte[1024];
int n;
while((n = in.read(tmp)) != -1){
fileOutputStream.write(tmp,0,n);
}
RandomAccessFile randomAccessFile = new RandomAccessFile(tempFile, "r");
randomAccessFile.readLine();
String fileName = randomAccessFile.readLine();
fileName = fileName.substring(fileName.lastIndexOf("=")+2,fileName.lastIndexOf("\""));
System.out.println(fileName);
randomAccessFile.seek(0);
long startPosition = 0;
int i = 1;
while((n = randomAccessFile.read()) != -1 && i<=4) {
if(n == '\n'){
startPosition = randomAccessFile.getFilePointer();
i++;
}
}
startPosition-=1;
randomAccessFile.seek(randomAccessFile.length());
long endPosition = randomAccessFile.getFilePointer();
int j=1;
while(endPosition >= 0 && j<=2){
endPosition--;
randomAccessFile.seek(endPosition);
if(randomAccessFile.readByte() == '\n'){
j++;
}
}
endPosition--;
String realPath = this.getServletContext().getRealPath("/") + "upload";
File fileupload = new File(realPath);
if(!fileupload.exists()){
fileupload.mkdir();
}
File savedFile = new File(realPath,fileName);
RandomAccessFile savedRandomAccessFile =
new RandomAccessFile(savedFile, "rw");
randomAccessFile.seek(startPosition);
while(startPosition<endPosition){
savedRandomAccessFile.write(randomAccessFile.readByte());
startPosition++;
}
savedRandomAccessFile.close();
randomAccessFile.close();
fileOutputStream.close();
in.close();
tempFile.delete();
}
}
文件下载
1.DownloadServlet
@WebServlet("/download")
public class DownloadServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException{
String filePahtOnServer = getServletContext().getRealPath("/upload/test.txt");
File fileOnServer = new File(filePahtOnServer);
FileInputStream readFileStream =null;
OutputStream outputStream = null;
if(fileOnServer.exists()){
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment;filename=test.txt");
readFileStream = new FileInputStream(fileOnServer);
outputStream = response.getOutputStream();
byte b[] = new byte[1024];
int n;
while((n = readFileStream.read(b)) != -1){
outputStream.write(b);
}
outputStream.close();
readFileStream.close();
request.setAttribute("result", "文件下载成功");
}else{
request.setAttribute("result", "文件下载失败");
}
request.getRequestDispatcher("download.jsp").forward(request, response);
}