廢話不多說了,直接給大家貼代碼了,具體代碼如下所示:
html代碼如下:
<body><input id="fileid" type="file" accept="video/*;capture=camera"onchange="onfile(this)"><input id="btn" type="button" value="提交"><script type="text/javascript">var xhr;function onfile(file) {var fd = new FormData();fd.append("fileToUpload", document.getElementById('fileid').files[0]);xhr = new XMLHttpRequest();xhr.open("POST", "http://localhost:8889/TestUp/upservlet");//xhr.setRequestHeader("Content-Type","charset=UTF-8");xhr.send(fd);xhr.onreadystatechange = processResponse;}function processResponse(){if(xhr.readyState == 4){alert("上傳結(jié)束數(shù)據(jù)流結(jié)束");if(xhr.status == 200){var infor = xhr.responseText;alert("服務(wù)器端的響應(yīng) = "+infor);}}}</script></body>
java代碼如下所示:
package com.yjm.up;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.List;import javax.servlet.ServletException;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.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;public class UpServlet extends HttpServlet {public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 得到上傳文件的保存目錄,將上傳的文件存放于WEB-INF目錄下,不允許外界直接訪問,保證上傳文件的安全String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");File file = new File(savePath);System.out.println("test。。。。");// 判斷上傳文件的保存目錄是否存在if (!file.exists() && !file.isDirectory()) {System.out.println(savePath + "目錄不存在,需要創(chuàng)建");// 創(chuàng)建目錄file.mkdir();}// 消息提示String message = "";try {// 使用Apache文件上傳組件處理文件上傳步驟:// 1、創(chuàng)建一個DiskFileItemFactory工廠DiskFileItemFactory factory = new DiskFileItemFactory();// 2、創(chuàng)建一個文件上傳解析器ServletFileUpload upload = new ServletFileUpload(factory);// 解決上傳文件名的中文亂碼upload.setHeaderEncoding("UTF-8");// 3、判斷提交上來的數(shù)據(jù)是否是上傳表單的數(shù)據(jù)if (!ServletFileUpload.isMultipartContent(request)) {// 按照傳統(tǒng)方式獲取數(shù)據(jù)return;}// 4、使用ServletFileUpload解析器解析上傳數(shù)據(jù),解析結(jié)果返回的是一個List<FileItem>集合,每一個FileItem對應(yīng)一個Form表單的輸入項List<FileItem> list = upload.parseRequest(request);for (FileItem item : list) {// 如果fileitem中封裝的是普通輸入項的數(shù)據(jù)if (item.isFormField()) {String name = item.getFieldName();// 解決普通輸入項的數(shù)據(jù)的中文亂碼問題String value = item.getString("UTF-8");// value = new String(value.getBytes("iso8859-1"),"UTF-8");System.out.println(name + "=" + value);} else {// 如果fileitem中封裝的是上傳文件// 得到上傳的文件名稱,String filename = item.getName();System.out.println(filename);if (filename == null || filename.trim().equals("")) {continue;}// 注意:不同的瀏覽器提交的文件名是不一樣的,有些瀏覽器提交上來的文件名是帶有路徑的,如:// c:/a/b/1.txt,而有些只是單純的文件名,如:1.txt// 處理獲取到的上傳文件的文件名的路徑部分,只保留文件名部分filename = filename.substring(filename.lastIndexOf("http://") + 1);// 獲取item中的上傳文件的輸入流InputStream in = item.getInputStream();// 創(chuàng)建一個文件輸出流FileOutputStream out = new FileOutputStream(savePath + "http://"+ filename);// 創(chuàng)建一個緩沖區(qū)byte buffer[] = new byte[1024 * 1024];// 判斷輸入流中的數(shù)據(jù)是否已經(jīng)讀完的標(biāo)識int len = 0;// 循環(huán)將輸入流讀入到緩沖區(qū)當(dāng)中,(len=in.read(buffer))>0就表示in里面還有數(shù)據(jù)while ((len = in.read(buffer)) > 0) {// 使用FileOutputStream輸出流將緩沖區(qū)的數(shù)據(jù)寫入到指定的目錄(savePath + "http://"http:// + filename)當(dāng)中out.write(buffer, 0, len);}out.flush();// 關(guān)閉輸入流in.close();// 關(guān)閉輸出流out.close();// 刪除處理文件上傳時生成的臨時文件item.delete();message = "文件上傳成功!";}}} catch (Exception e) {message = "文件上傳失敗!";e.printStackTrace();}request.setAttribute("message", message);request.getRequestDispatcher("/message.jsp").forward(request, response);}}
用到的java 包 是 超過1G上傳
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
//xhr.setRequestHeader("Content-Type","application/octet-stream;charset=UTF-8"); 這不能添加
新聞熱點
疑難解答
圖片精選