天天看點

JSP+Servlet中使用cos.jar實作檔案上傳下載下傳

第一、前言

本文通過JSP+Servlet的架構,用cos.jar實作檔案的上傳與下載下傳。不涉及資料庫互動。

第二、引入相關jar包

下載下傳位址:JSP+Servlet+cos檔案上傳下載下傳Jar包.rar

第三、代碼示例

1、建立com.servlet.UploadServlet.java

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oreilly.servlet.MultipartRequest;
/**
 * 檔案上傳
 * @author shixiangcheng
 * 2020-08-09
 */
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");
		String batchNo=UUID.randomUUID().toString().trim();		
		String root=getServletContext().getRealPath("/");
		MultipartRequest mr=new MultipartRequest(request, root,"UTF-8");
		//可通過下面方式擷取頁面送出的其它字段值
		//String studentNo=mr.getParameter("studentNo");
		File file=mr.getFile("file");
		String realFileName=file.getName();
        File fileMkdir=new File("E:\\檔案");
        //定義輸出流,将檔案儲存在E盤   file.getOriginalFilename()為獲得檔案的名字 
        FileOutputStream os=new FileOutputStream(fileMkdir.getPath()+"\\"+batchNo+realFileName.substring(realFileName.indexOf(".")));
        InputStream in=new FileInputStream(file);
		byte buffer[]=new byte[1024];
		//判斷輸入流中的資料是否已經讀完的辨別
		int len=0;
		//循環将輸入流讀入到緩沖區當中,(len=in.read(buffer))>0就表示in裡面還有資料
		while((len=in.read(buffer))>0){//使用FileOutputStream輸出流将緩沖區的資料寫入到指定的目錄
			os.write(buffer, 0, len);
		}
        os.flush(); //關閉流 
        in.close();
        os.close();
		request.getRequestDispatcher("/success.jsp?realFileName="+realFileName+"&fileName="+batchNo+realFileName.substring(realFileName.indexOf("."))).forward(request, response);
	}
}
           

2、建立com.servlet.DownLoadServlet.java

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 檔案下載下傳
 * @author shixiangcheng
 * 2020-08-09
 */
public class DownLoadServlet extends HttpServlet{
	private static final long serialVersionUID = -4703546973088226197L;
	public DownLoadServlet() {
		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");
		String fileName=request.getParameter("fileName");
		String realFileName=request.getParameter("realFileName");
    	String path = "E:/檔案/"+ fileName;
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		OutputStream fos = null;
		InputStream fis = null;
		File uploadFile = new File(path);
		try {
			fis = new FileInputStream(uploadFile);
			bis = new BufferedInputStream(fis);
			fos =response.getOutputStream();
			bos = new BufferedOutputStream(fos);
			//這個就就是彈出下載下傳對話框的關鍵代碼
			response.setHeader("Content-disposition","attachment;filename="+URLEncoder.encode(realFileName,"UTF-8"));
			byte[] buffer = new byte[1024];
			//判斷輸入流中的資料是否已經讀完的辨別
			int len = 0;
			//循環将輸入流讀入到緩沖區當中,(len=in.read(buffer))>0就表示in裡面還有資料
			while((len=bis.read(buffer))>0){
				bos.write(buffer, 0, len);
			}
			bos.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(fis!=null) fis.close();
			if(bis!=null) bis.close();
			if(fos!=null) fos.close();
			if(bos!=null) bos.close();
		}
	}
}
           

3、修改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_2_5.xsd" id="WebApp_ID" version="2.5">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
   <servlet>
    <description></description>
    <display-name>UploadServlet</display-name>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>com.servlet.UploadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/UploadServlet</url-pattern>
  </servlet-mapping>
   <servlet>
    <description></description>
    <display-name>DownLoadServlet</display-name>
    <servlet-name>DownLoadServlet</servlet-name>
    <servlet-class>com.servlet.DownLoadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DownLoadServlet</servlet-name>
    <url-pattern>/DownLoadServlet</url-pattern>
  </servlet-mapping>
</web-app>
           

4、建立index.jsp

<%@page contentType="text/html;charset=utf-8" %>
<html>
<head>
<title>上傳</title>
<style type="text/css">
table {font-size:18px;}
table caption {font-size:30px;}
</style>
<script type="text/javascript">
function checkForm(myForm) {			
	if(myForm.file.value == "") {
		alert("附件不能為空!");
		myForm.file.focus();
		return false;
	}
	return true;
}
</script>
</head>
<body>
<form action="<%=request.getContextPath()%>/UploadServlet" name="form1" method="post" onsubmit="return checkForm(this);" enctype="multipart/form-data">
<table border="1" align="center">
<caption>檔案上傳</caption>	
<tr>
	<td>檔案<font color="red">*</font></td>
	<td><input type="file" name="file" id="file" style="width:400px;"/></td>
</tr>
 <tr>
	<td colspan="2" align="center">&nbsp;</td>
</tr>
<tr>
	<td colspan="2" align="center">
		<input type="submit" value="送出" style="width:100px;">
	</td>
</tr>
</table>
</form>
</body>
</html>
           

5、建立success.jsp

<%@page contentType="text/html;charset=utf-8" %>
<%
	String realFileName=request.getParameter("realFileName");
	String fileName=request.getParameter("fileName");
%>
<html>
<head>
	<title>下載下傳</title>
</head>
<body>
<span>上傳成功!</span>
<a href="<%=request.getContextPath() %>/DownLoadServlet?realFileName=<%=realFileName%>&fileName=<%=fileName%>">下載下傳</a>
<a href="javascript:history.go(-1);">傳回</a>
</body>
</html>
           

6、運作

第一、選擇檔案,然後點選送出

JSP+Servlet中使用cos.jar實作檔案上傳下載下傳

第二、送出成功後,到下面頁面,點選下載下傳,可下載下傳上傳的檔案。

JSP+Servlet中使用cos.jar實作檔案上傳下載下傳

第三、檔案上傳後存在硬碟上。

JSP+Servlet中使用cos.jar實作檔案上傳下載下傳

歡迎大家積極留言交流學習心得,點贊的人最美麗,謝謝!