在html頁面使用JavaScript實現文件上傳到本地服務器並放回文件所在路徑

以前學的是jsp頁面,可是畢設項目是html頁面,後臺響應數據,html不可以直接獲取響應數據。我使用jsp很容易後去,但是變成html頁面之後,有點難了,應爲不可以直接使用EL表達式,所以我就使用JavaScript用於接收後臺傳來的數據。

開講:

首先創建一個項目:

導入所需的jar包:

寫html頁面:

<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8" />
	<title>Document</title>
<style>
body{
	transition:1s;
}
#div1{
	width:100%;
	height:3px;
	position: relative;
	top:50px;
}
#num{
	position: absolute;
	width:100%;
	height: 3px;
	line-height: 3px;
	text-align: center;
	top:-1px;
	font-size: 30px;
}
#div2{
	width:0;
	height: 3px;
	background: #317EF3;
	transition: .2s;
	opacity:1;
}
</style>
</head>
<body>

	<input type="file" name="file" id="f" value="" />
	<input type="button" value="按鈕" id="btn"/><br>
	<input type="text" id="span"></span>
<script type="text/javascript">
	/*
		當使用表單上傳控件的時候,可以通過表單控件下的
		files[0],找到上傳的文件資源。
		new FormData:
			FormData對象可以組裝一組用 XMLHttpRequest發送請求的鍵/值對
			通過append方法把鍵值對放到FormData對象中,當send的時候直接傳
			FormData對象即可。
			FormData.append('user','momo');
			FormData.append('pass','12345');
			ajax.send(FormData);		
	*/
	
	
	const f = document.getElementById('f');
	const btn = document.getElementById('btn');
	const span = document.getElementById('span');
	console.dir(f)
	
	btn.onclick = function(){
		const ajax = new XMLHttpRequest;
		ajax.open('post','Upload2Servlet');
		//ajax.setRequestHeader('Content-Type','multipart/form-data');
		const ff = f.files[0];
		const formData = new FormData;
		formData.append('file',ff);
		ajax.send(formData);
		ajax.onload = function(){
			console.log(ajax.responseText)
			span.value = JSON.parse(ajax.responseText).msg;
			//result.innerHTML=document.getElementById("text1").value;
		}
		
	}

</script>
	
</body>
</html>

後臺代碼:


import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.fasterxml.jackson.databind.ObjectMapper;
@WebServlet("/Upload2Servlet")
public class Upload2Servlet extends HttpServlet {
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");

		Map<String,Object> map=new HashMap<String,Object>();
		DiskFileItemFactory factory = new DiskFileItemFactory();
		ServletFileUpload sfu = new ServletFileUpload(factory);
		try {
			List<FileItem> fileItemList = sfu.parseRequest(request);
			FileItem fi1 = fileItemList.get(0);
			
			String url=fi1.getName();
			String path="D:/video/"+url+"";
			File destFile = new File(path);
			fi1.write(destFile);
			map.put("msg",path);
			System.out.println(map.get("msg"));
			ObjectMapper mapper=new ObjectMapper();
			mapper.writeValue(response.getWriter(),map);
		} catch (FileUploadException e) {
			throw new RuntimeException(e);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}

運行項目結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章