1. 程式人生 > >多檔案預覽上傳基於Struts

多檔案預覽上傳基於Struts

多檔案預覽上傳基於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();
    }