多檔案預覽上傳基於Struts
阿新 • • 發佈:2018-12-25
多檔案預覽上傳基於Struts
實現多檔案預覽,多檔案上傳,基於struts,使用jquery實現,邏輯簡單轉化為js等方便。
- 頁面程式碼
<html>
<head>
<link href="../../css/style.css" rel="stylesheet" type="text/css">
<link href="../../css/addstyle.css" rel="stylesheet" type="text/css">
<script language="javascript" src="../../js/jquery-1.4.2.min.js" ></script>
<title>上傳任意多個檔案</title>
<script language="javascript">
// 在DOM中插入一個上傳檔案列表項(div元素)和一個<input type="file"/>元素
function insertNextFile(obj)
{
// 獲取上傳控制個數
var childnum = $("#files > input" ).size();
var id = childnum - 1 ;
var fullName = obj.value;
var fileHtml = "";
var files_preview = "files_preview"+id;
fileHtml += "<tr id = 'files_preview"+ id +"'><td width='25%' align='center'>" + (id + 1) + "</td><td width='50%' align='center'>" + fullName.substr(fullName.lastIndexOf("\\")+1) + "</td>";
fileHtml += "<td width='25%' align='center'><a href='javascript:void(0)' onclick='javascript:removeFile(" + id + ")' >刪除</a>";
fileHtml += "</td> </tr>";
$("#files_preview").append(fileHtml);
obj.style.display = 'none'; // 隱藏當前的<input type=”file”/>元素
addUploadFile(childnum); // 插入新的<input type=”file”/>元素
}
// 插入新的<input type=”file”/>元素,適合於不同的瀏覽器(包括IE、FireFox等)
function addUploadFile(index)
{
$("#files").append("<input type='file' id='file_" + index +
"' name='file[" + index + "]' onchange='insertNextFile(this)'/>");
}
function removeFile(index) // 刪除當前檔案的<div>和<input type=”file”/>元素
{
$("#files_preview"+index).remove();
$("#file_"+index).remove();
if($("#files > input").size() == 1){
$("#files > input:eq(0)").attr("name","file["+0+"]");
$("#files > input:eq(0)").attr("id","file_"+ 0);
}
var $ttr = $("#files_preview tr:not(:first)").detach();
$ttr.each(function(i){
var vid = $(this).attr("id");
var vidnum = vid.substring(13);
$("#file_"+vidnum).attr("name","file["+i+"]");
$("#file_"+vidnum).attr("id","file_"+i);
$(this).children("td:eq(0)").html(i + 1);
$(this).children("td:last").empty();
// $(this).children("td:last a:first").attr("href","javascript:removeFile('"+i+"');");
var aHtml = "<a href='javascript:void(0)' onclick='removeFile(" + i + ")' >刪除</a>";
$(this).children("td:last").append(aHtml);
$(this).attr("id","files_preview"+i);
});
$("#files_preview").append($ttr);
var childnum = $("#files > input").size();
$("#files > input:last").attr("name","file["+(childnum - 1)+"]");
$("#files > input:last").attr("id","file_"+(childnum - 1));
}
function showStatus(obj) // 顯示“正在上傳檔案”提示資訊
{
$("#status").css("visibility","visible");
}
</script>
</head>
<body>
<html:form enctype="multipart/form-data" action="/ins/complaintNew/NewUploadFileAction.do" method="post">
<input type="hidden" name="method" />
<span id="files" > <%-- 在此處插入用於上傳檔案的input元素 --%>
<input type="file" id="file_0" name="file[0]" onchange="insertNextFile(this)" /> </span>
<html:submit value=" 上傳 " onclick="showStatus(this);" />
</html:form>
<p>
<div id="status" style="visibility: hidden; color: Red" >
正在上傳檔案
</div>
<p>
<table id ="files_preview" width="100%" border="1" cellpadding="0" cellspacing="1" ><tr ><td width="25%" align="center">序號</td><td width="50%" align="center">上傳檔名稱</td><td width="25%" align="center">刪除</td></tr>
</table>
</body>
</html>
- action類關鍵程式碼片段
NewComplaintBaseForm fm = (NewComplaintBaseForm) form;
int count = fm.getFileCount(); // 獲得上傳檔案的總數
for (int j = 0; j < count; j++) {
int fileMxsize = Integer.parseInt(listFtp.get(3).toString());
FormFile file = fm.getFile(j);
String fileNme=file.getFileName();
// 判斷檔案大小
int flength = fileMxsize * 1024;
int ok = (int) file.getFileSize() / 1024;
if (ok > flength) {
System.out.println("上傳檔案" + fileNme + "失敗");
request.setAttribute("message", "上傳的檔案大小為:" + ok+ "kb,超過最大限度"+fileMxsize+"M,不允許上傳 "); request.setAttribute("newFileNme", "");
}
}
for (int i = 0; i < count; i++)
{
FormFile file = fm.getFile(i);
stream = file.getInputStream();
String fileNme=file.getFileName();
String newFileNme=file.getFileName();
int pos=newFileNme.lastIndexOf(".");
}
System.out.println("上傳檔案"+showfileNm+"成功");
- form關鍵程式碼片段
private Long fileId;
private String fileName;
private String newFileName;
private String fileUploadUser;
private String fileUploadTime;
// 用於儲存不定數量的FormFile物件
private List<FormFile> myFiles = new ArrayList<FormFile>();
public FormFile getFile(int i) // 索引屬性
{
return myFiles.get(i);
}
public void setFile(int i, FormFile myFile) // 索引屬性
{
if (myFile.getFileSize() > 0) // 只有上傳檔案的位元組數大於0,才上傳這個檔案
{
myFiles.add(myFile);
}
}
public int getFileCount() // 獲得上傳檔案的個數
{
return myFiles.size();
}