JS+Struts2多文件上傳實例詳解
更新時間:2018年08月29日 10:41:54 作者:襲烽
這篇文章主要為大家詳細介紹了JS+Struts2多文件上傳實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了JS Struts2多文件上傳的具體代碼,供大家參考,具體內(nèi)容如下
1、JSP頁面:
JS控制增加刪除多個上傳文件框,代碼如下:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<%@include file="../../_head.html"%>
<title>文件上傳</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<script language="javascript" type="text/javascript"
src="../js/common/common.js"></script>
<script type="text/javascript">
var pos = 1;
function addFileComponent() {
var elTable = document.getElementById('uploadTable').getElementsByTagName('tbody')[0];
var elTr = document.getElementById('fileTr');
var elTr2 = document.getElementById('op');
var newEleTr = elTr.cloneNode(true);
newEleTr.id = "fileTr" + pos;
newEleTr.style.display = "";
inputs = newEleTr.getElementsByTagName('input');
inputs[0].id="file" + pos;
var elInput = inputs[1];
elInput.onclick=delFileComponent;
elInput.id="delbutton" + pos++;
elTable.insertBefore(newEleTr, elTr2);
}
function delFileComponent() {
var elTable = document.getElementById('uploadTable').getElementsByTagName('tbody')[0];
var trArr = elTable.getElementsByTagName("tr");
var el = event.srcElement;
for(j = 0; j < trArr.length; j++) {
tr = trArr[j];
if(tr.getElementsByTagName("input")[1] == el) {
elTable.removeChild(tr);
pos--;
break;
}
}
}
function isValidateFile(obj){
var extend = obj.value.substring(obj.value.lastIndexOf(".")+1);
if(extend==""){
}else{
if(!(extend=="xls"||extend=="doc")){
alert("請上傳后綴名為xls或doc的文件!");
var nf = obj.cloneNode(true);
nf.value='';
obj.parentNode.replaceChild(nf, obj);
return false;
}
}
return true;
}
</script>
</head>
<body>
<%@ include file="/common/message.jsp"%>
<div class="body-box">
<div class="rhead">
<div class="rpos">
文件上傳(可同時上傳多份文件)
</div>
<div class="clear"></div>
</div>
<s:form id="ops" action="csc_mUploadFile" theme="simple"
cssClass="rhead" enctype = "multipart/form-data">
<table id="uploadTable" width="100%" border="0">
<tr>
<td>
<input type="file" id="file0" name="uploadFile" size="50"
onchange="isValidateFile(this);" />
</td>
</tr>
<tr id="fileTr" style="display: none;">
<td>
<input type="file" size="50" name="uploadFile"
onchange="isValidateFile(this);" />
<input type="button" value="刪除" />
</td>
</tr>
<tr id="op">
<td>
<input type="submit" id="uploadbutton" value="上傳" />
<input type="button" value="添加" id="addbutton"
onClick="addFileComponent();" />
</td>
</tr>
</table>
</s:form>
<table class="pn-ltable" width="100%" cellspacing="1" cellpadding="0"
border="0">
<thead class="pn-lthead">
<tr>
<th>
序號
</th>
<th>
文件名
</th>
<th>
上傳時間
</th>
</tr>
</thead>
<tbody class="pn-ltbody">
<tr onmouseover="Pn.LTable.lineOver(this);"
onmouseout="Pn.LTable.lineOut(this);"
onclick="Pn.LTable.lineSelect(this);">
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
2、Action后臺處理上傳文件:
//uploadFile對應(yīng)頁面<input type="file" name="uploadFile">
private List<File> uploadFile;
//文件名對應(yīng)uploadFile+“FileName”,要不獲取不到文件名
private List<String> uploadFileFileName;
// 文件上傳
public String mUploadFile() {
if (null == uploadFile) {
this.addActionError("請上傳文件!");
} else {
String fileName = "";
try {
//在自己代碼中控制文件上傳的服務(wù)器目錄
String directory = ServletActionContext.getServletContext().getRealPath("/uploads");
//判斷該目錄是否存在,不存在則創(chuàng)建
FileUtil.makeDir(directory);
//循環(huán)處理上傳的文件
for(int i=0,j=uploadFile.size();i<j;i++){
fileName = uploadFileFileName.get(i);
String filePath = directory + File.separator + fileName;
FileUtil.uploadFile(uploadFile.get(i), new File(filePath));
}
} catch (IOException e) {
this.addActionMessage("");
}
this.addActionMessage("文件上傳成功!");
}
return "fileUpload";
}
FileUtil代碼如下:
public class FileUtil {
private static final int BUFFER_SIZE = 16 * 1024;
public static void uploadFile(File src, File dst) throws IOException {
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(dst),
BUFFER_SIZE);
byte[] buffer = new byte[BUFFER_SIZE];
while (in.read(buffer) > 0) {
out.write(buffer);
}
} finally {
if (null != in) {
in.close();
}
if (null != out) {
out.close();
}
}
}
public static String getExtention(String fileName) {
int pos = fileName.lastIndexOf(".");
return fileName.substring(pos);
}
public static void makeDir(String directory) {
File dir = new File(directory);
if (!dir.isDirectory()) {
dir.mkdirs();
}
}
public static String generateFileName(String fileName)
throws UnsupportedEncodingException {
DateFormat format = new SimpleDateFormat("yyMMddHHmmss");
String formatDate = format.format(new Date());
String extension = fileName.substring(fileName.lastIndexOf("."));
fileName = new String(fileName.getBytes("iso8859-1"), "gb2312");
return fileName + "_" + formatDate + new Random().nextInt(10000)
+ extension;
}
}
擴展:
1.可以實現(xiàn)帶進度條的上傳與下載;
2.可以用xml文件記錄上傳的文件清單,并且可以根據(jù)頁面對上傳文件的操作來修改相應(yīng)的xml文件;
完畢!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- 原生JS實現(xiàn)前端本地文件上傳
- JS實現(xiàn)可視化文件上傳
- js實現(xiàn)文件上傳功能 后臺使用MultipartFile
- vue.js 圖片上傳并預(yù)覽及圖片更換功能的實現(xiàn)代碼
- php+croppic.js實現(xiàn)剪切上傳圖片功能
- JavaScript使用享元模式實現(xiàn)文件上傳優(yōu)化操作示例
- JS實現(xiàn)圖片上傳多次上傳同一張不生效的處理方法
- js實現(xiàn)圖片上傳并預(yù)覽功能
- vue.js圖片轉(zhuǎn)Base64上傳圖片并預(yù)覽的實現(xiàn)方法
- Angularjs實現(xiàn)多圖片上傳預(yù)覽功能
- JavaScript實現(xiàn)異步圖像上傳功能
- SpringBoot+Vue.js實現(xiàn)前后端分離的文件上傳功能
- node.js自動上傳ftp的腳本分享
- JS實現(xiàn)的文件拖拽上傳功能示例
- Vue2.0實現(xiàn)調(diào)用攝像頭進行拍照功能 exif.js實現(xiàn)圖片上傳功能
- JS和Canvas實現(xiàn)圖片的預(yù)覽壓縮和上傳功能
- JavaScript代碼實現(xiàn)txt文件的上傳預(yù)覽功能
- js 實現(xiàn) input type="file" 文件上傳示例代碼
- js實現(xiàn)上傳圖片預(yù)覽的方法
- Servlet+Jsp實現(xiàn)圖片或文件的上傳功能具體思路及代碼
- 上傳圖片預(yù)覽JS腳本 Input file圖片預(yù)覽的實現(xiàn)示例
- JS實現(xiàn)上傳圖片的三種方法并實現(xiàn)預(yù)覽圖片功能
- js實現(xiàn)圖片上傳并正常顯示
- 一個簡單的jQuery插件ajaxfileupload.js實現(xiàn)ajax上傳文件例子
- JS中使用FormData上傳文件、圖片的方法
- 客戶端js判斷文件類型和文件大小即限制上傳大小
- js獲取上傳文件的絕對路徑實現(xiàn)方法
- 原生JS和jQuery版實現(xiàn)文件上傳功能
- 微信JSSDK上傳圖片
- 簡單實現(xiàn)js上傳文件功能
- JS文件上傳神器bootstrap fileinput詳解
- js實現(xiàn)上傳圖片之上傳前預(yù)覽圖片
- Javascript圖片上傳前的本地預(yù)覽實例
- 學(xué)習(xí)使用AngularJS文件上傳控件
- JS簡單實現(xiàn)文件上傳實例代碼(無需插件)
- 分享5個好用的javascript文件上傳插件
相關(guān)文章
java數(shù)據(jù)結(jié)構(gòu)排序算法之歸并排序詳解
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)排序算法之歸并排序,結(jié)合具體實例形式詳細分析了歸并排序的原理、實現(xiàn)技巧與相關(guān)注意事項,需要的朋友可以參考下2017-05-05
Java基礎(chǔ)之List內(nèi)元素的排序性能對比
這篇文章主要介紹了Java基礎(chǔ)之List內(nèi)元素的排序性能對比,文中有非常詳細的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04

