1. 程式人生 > >servlet3.0之ajax檔案上傳和進度條

servlet3.0之ajax檔案上傳和進度條

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="bootstrap-3.3.7/css/bootstrap.css" />
</head>
<body>
	<div class="container" style="padding:20px">
		<!-- 進度條控制 -->
		<div class="progress">
			<div id="progressDiv" class="progress-bar progress-bar-success progress-bar-striped active"  style="min-width:2em;">
				
			</div>
		</div>
		<!-- 表單開始 -->
		<form id="f" class="col-md-8" enctype="multipart/form-data">
			<div class="input-group">
				<input type="file" name="myfile">
			</div>
			<button type="button" id="uploadBtn" class="btn btn-primary">上傳</button>
		</form>
	</div>
	<script>
			document.getElementById('uploadBtn').addEventListener('click', function(){
				var xhr = new XMLHttpRequest();
				xhr.open('post','UploadServlet');
				//設定當請求狀態改變時觸發回撥
				xhr.onreadystatechange=function(){
					if(xhr.readyState == 4 && xhr.status==200){
						console.info('上傳完成');
					}
				}
				//設定上傳進度改變回調
				xhr.upload.onprogress=function(pd){
					//判斷是否可以獲取上傳進度(服務端是否已接收到請求)
					if(pd.lengthComputable){
						//獲取當前上傳的 進度
						var current = pd.loaded;
						//獲取總長度
						var total = pd.total;
						//計算獲取當前進度
						var progress = Math.round((current / total) *100)+'%';
						//改變進度條
						document.getElementById('progressDiv').style.width=progress;
						document.getElementById('progressDiv').innerHTML=progress;
					}
				}
				
				//將表單資料封裝到formData中
				var formData = new FormData(document.getElementById('f'));
				//傳送資料
				xhr.send(formData);
			});
	
	</script>
</body>
</html>

package com.softeem.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

/**
 * Servlet implementation class UploadServlet
 */
@WebServlet("/UploadServlet")
@MultipartConfig(location="d:\\tempFile"
//fileSizeThreshold=1024*1024*2,
//maxFileSize=1024*1024*2L,
//maxRequestSize=1024*1024*1024*4L
)
public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   
    public UploadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		Part part = request.getPart("myfile");
		String fname = part.getSubmittedFileName();
		part.write("d://目的/"+fname);
	}

}