基于html5+java實(shí)現(xiàn)大文件上傳實(shí)例代碼
廢話不多說了,直接給大家貼代碼了,具體代碼如下所示:
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 + "目錄不存在,需要?jiǎng)?chuàng)建");
// 創(chuàng)建目錄
file.mkdir();
}
// 消息提示
String message = "";
try {
// 使用Apache文件上傳組件處理文件上傳步驟:
// 1、創(chuàng)建一個(gè)DiskFileItemFactory工廠
DiskFileItemFactory factory = new DiskFileItemFactory();
// 2、創(chuàng)建一個(gè)文件上傳解析器
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é)果返回的是一個(gè)List<FileItem>集合,每一個(gè)FileItem對(duì)應(yīng)一個(gè)Form表單的輸入項(xiàng)
List<FileItem> list = upload.parseRequest(request);
for (FileItem item : list) {
// 如果fileitem中封裝的是普通輸入項(xiàng)的數(shù)據(jù)
if (item.isFormField()) {
String name = item.getFieldName();
// 解決普通輸入項(xiàng)的數(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("\\") + 1);
// 獲取item中的上傳文件的輸入流
InputStream in = item.getInputStream();
// 創(chuàng)建一個(gè)文件輸出流
FileOutputStream out = new FileOutputStream(savePath + "\\"
+ filename);
// 創(chuàng)建一個(gè)緩沖區(qū)
byte buffer[] = new byte[1024 * 1024];
// 判斷輸入流中的數(shù)據(jù)是否已經(jīng)讀完的標(biāo)識(shí)
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 + "\\"
// + filename)當(dāng)中
out.write(buffer, 0, len);
}
out.flush();
// 關(guān)閉輸入流
in.close();
// 關(guān)閉輸出流
out.close();
// 刪除處理文件上傳時(shí)生成的臨時(shí)文件
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");
這不能添加
相關(guān)文章
RestClient?通過攔截器實(shí)現(xiàn)請(qǐng)求加密的示例
本文介紹了如何通過攔截器實(shí)現(xiàn)請(qǐng)求加密,并通過RestClient優(yōu)化了加密過程,傳統(tǒng)的加密方法依賴對(duì)象轉(zhuǎn)換和序列化處理,容易導(dǎo)致加密不一致或難以調(diào)試的問題,通過引入攔截器,可以直接操作請(qǐng)求體,避免了不必要的轉(zhuǎn)換步驟,確保加密過程與請(qǐng)求體完全一致,感興趣的朋友一起看看吧2025-02-02
java實(shí)現(xiàn)json字符串格式化處理的工具類
這篇文章主要為大家詳細(xì)介紹了如何使用java實(shí)現(xiàn)json字符串格式化處理的工具類,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
SpringBoot整合Flyway實(shí)現(xiàn)數(shù)據(jù)庫的初始化和版本管理操作
Flyway?是一款開源的數(shù)據(jù)庫版本管理工具,它可以很方便的在命令行中使用,或者在Java應(yīng)用程序中引入,用于管理我們的數(shù)據(jù)庫版本,這篇文章主要介紹了SpringBoot整合Flyway實(shí)現(xiàn)數(shù)據(jù)庫的初始化和版本管理,需要的朋友可以參考下2023-06-06
spring?java?動(dòng)態(tài)獲取consul?K/V的方法
這篇文章主要介紹了spring?java?動(dòng)態(tài)獲取consul?K/V的相關(guān)資料,主要包括springConsul配置kv路徑以及自動(dòng)注入consulKV到服務(wù)中,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
java.lang.OutOfMemoryError 錯(cuò)誤整理及解決辦法
這篇文章主要介紹了java.lang.OutOfMemoryError 錯(cuò)誤整理及解決辦法的相關(guān)資料,需要的朋友可以參考下2016-10-10
SpringBoot整合Web之CORS支持與配置類和 XML配置及注冊(cè)攔截器
這篇文章主要介紹了SpringBoot整合Web開發(fā)中CORS支持與配置類和 XML配置及注冊(cè)攔截器的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08

