uploadify springMVC

小さいです哥發表於2015-03-13
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>


<script src="${ctx}/jslib/uploadify/jquery.uploadify.js" type="text/javascript" charset="utf-8"></script>

<link href="${ctx}/jslib/uploadify/uploadify.css" rel="stylesheet" type="text/css" />

<script type="text/javascript">
    $(function() {
        
        //新增介面的附件管理
        $("#file_upload").uploadify({  
            'height'        : 27,   
            'width'         : 80,    
            'buttonText'    : '新增附件',
            'queueID': 'fileQueue',                        //佇列的ID
            'queueSizeLimit':5,
            'swf'           : '${ctx}/jslib/uploadify/uploadify.swf',  
            'uploader'      : '${ctx}/fileUpload/uploadFile',  
            'auto'          : false,  
            'fileTypeExts'  : '*.rar',  
            'fileObjName'   : 'file',  
            'multi'   : true, 
            'removeCompleted': false,                       //是否完成後移除序列,預設為true
            'fileSizeLimit': '100MB',                       //單個檔案大小,0為無限制,可接受KB,MB,GB等單位的字串值
            'onUploadSuccess':function(file, data, response){ 
                var vv = data.split('|');
                var bb = $("input[name=attachmentIds]").attr('value');
                bb +="," + vv[0];
                $("input[name=attachmentIds]").attr('value',bb);
                
                bb = $("input[name=attachmentNames]").attr('value');
                bb +="," + vv[1];
                $("input[name=attachmentNames]").attr('value',bb);
                //$.messager.alert("提示", "上傳完畢!");  
            }
        }); 
        
        $('#documentId').combotree({
            url : '${ctx}/dictionarytype/tree?code=documenttype',
            parentField : 'pid',
            panelHeight : 'auto',
            onBeforeExpand : function(node, param) {
                $('#documentId').combotree("tree").tree("options").url = "${ctx}/dictionarytype/trees?type=0&pId="
                        + node.id;
            
            }
        });
        $('#documentAddForm').form({
            url : '${ctx}/document/add',
            onSubmit : function() {
                progressLoad();
                
                var isValid = $(this).form('validate');
                if (!isValid) {
                    progressClose();
                }else{
                    var bb = $("input[name=attachmentIds]").attr('value');
                    var num = $("#file_upload").data('uploadify').queueData.queueLength;
                    if(bb=="" && num>0){
                        progressClose();
                        $.messager.show({
                            title : '提示',
                            msg : '<div class="light-info"><div class="light-tip icon-tip"></div><div>'
                                    + "您你附件還沒上傳,請先上傳附件!"
                                    + '</div></div>',
                            showType : 'show'
                        });
                        return false;
                    }
                }
                return isValid;
            },
            success : function(result) {
                progressClose();
                result = $.parseJSON(result);
                if (result.success) {
                    parent.$.modalDialog.openner_dataGrid.datagrid('reload');//
                    $.messager
                    .show({
                        title : '提示',
                        msg : '<div class="light-info"><div class="light-tip icon-tip"></div><div>'
                                + result.msg
                                + '</div></div>',
                        showType : 'show'
                    });
                    parent.$.modalDialog.handler.dialog('close');
                }else{
                    parent.$.messager.alert('提示', result.msg, 'warning');
                }
            }
        });
        
    });
    
    function init(){
        var attachments = $("input[name=attachmentIds]").attr('value');
        $("input[name=attachmentIds]").attr('value',"");
        $('#file_upload').uploadify('cancel', '*');
        if(attachments!=""){
            $.post('${ctx}/fileUpload/deleteFile', {
                attachments : attachments
            }, function(result) {
                
            }, 'json');
        }
    }
</script>
<div style="padding: 3px;">
    <form id="documentAddForm" method="post">
        <table class="grid">
            <tr>
                <td>標題</td>
                <td  colspan="3"><input name="title" type="text" placeholder="請輸入字典編碼" class="easyui-validatebox" data-options="required:true" style="width: 355px; height: 29px;" ></td>
            </tr>
            <tr>
                  <td>排序</td>
                <td><input name="seq" value="0"  class="easyui-numberspinner" style="width: 140px; height: 29px;" required="required" data-options="editable:false"></td>
                <td>類別</td>
                <td><select id="documentId" name="documentId" style="width: 140px; height: 29px;" data-options="required:true"></select></td>
            </tr>
            <tr>
                <td>備註</td>
                <td colspan="3"><textarea name="content" rows="5" cols="50" ></textarea></td>
            </tr>
            <tr>
                <td>文件附件</td>
                <td colspan="3">
                    <input name="attachmentIds" id="attachmentIds" type="hidden"  class="easyui-validatebox" >
                    <input name="attachmentNames" id="attachmentNames" type="hidden"  class="easyui-validatebox" >
                    <input type="file" name="file_upload" id="file_upload"/>  
                    <a class="easyui-linkbutton" href="javascript:$('#file_upload').uploadify('upload', '*')">上傳檔案</a> | <a class="easyui-linkbutton" href="javascript:init()">取消上傳</a>  
                </td>
                
            </tr>
        </table>
        <div id="fileQueue" class="fileQueue"></div>
    </form>
package east.mvc.controller.file;

package east.mvc.controller.file;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import east.mvc.controller.base.BaseController;
import east.mvc.framework.constant.GlobalConstant;
import east.mvc.model.base.Graph;
import east.mvc.model.sys.Tattachment;
import east.mvc.pageModel.base.Grid;
import east.mvc.pageModel.base.PageFilter;
import east.mvc.pageModel.base.SessionInfo;
import east.mvc.pageModel.sys.MapHistory;
import east.mvc.service.basic.GraphServiceI;
import east.mvc.service.sys.AttachmentServiceI;
import east.mvc.service.sys.MapHistoryServiceI;
import east.mvc.utils.StringUtil;

@Controller
@RequestMapping("/fileUpload")
public class FileUploadController extends BaseController {
    private HttpServletRequest request = null;

    @Autowired
    private AttachmentServiceI attachmentService;

    @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
    public String uploadFile(HttpServletRequest request, HttpServletResponse response) throws IOException {
        this.request = request;
        String responseStr = "";
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        // 獲取前臺傳值
        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
        // String ctxPath =
        // request.getSession().getServletContext().getRealPath("/")+ "\\" +
        // "images\\";
        String configPath = File.separator + "upload" + File.separator;
        // String vv = getPhysicalPath(configPath);
        // String vv2 = getPhysicalPathByRoot(configPath);
        String ctxPath = request.getSession().getServletContext().getRealPath("/");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
        String year = sdf.format(new Date());
        configPath += year + File.separator;
        sdf = new SimpleDateFormat("MM");
        String month = sdf.format(new Date());
        configPath += month + File.separator;

        ctxPath += configPath;
        // 建立資料夾
        File file = new File(ctxPath);
        if (!file.exists()) {
            file.mkdirs();
        }
        String fileName = null;
        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
            // 上傳檔名
            // System.out.println("key: " + entity.getKey());
            MultipartFile mf = entity.getValue();
            fileName = mf.getOriginalFilename();

            String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();

            SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
            String newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;
            responseStr = configPath + newFileName + "|" + fileName;
            File uploadFile = new File(ctxPath + newFileName);
            try {
                FileCopyUtils.copy(mf.getBytes(), uploadFile);
            } catch (IOException e) {
                responseStr = "上傳失敗";
                e.printStackTrace();
            }

        }
        response.setHeader("Content-type", "text/html;charset=UTF-8");
        // 這句話的意思,是告訴servlet用UTF-8轉碼,而不是用預設的ISO8859
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(responseStr);
        return null;
    }

    @RequestMapping("/deleteFile")
    @ResponseBody
    public void getAreaIds(HttpServletRequest request, String attachments) {
        if (!attachments.equals("")) {
            String ctxPath = request.getSession().getServletContext().getRealPath("/");
            attachments = attachments.substring(1);
            String[] value = attachments.split(",");
            for (int i = 0; i < value.length; i++) {
                File file = new File(ctxPath + "//" + value[i]);
                file.delete();
            }
        }
    }

    @RequestMapping("/downloadFile")
    @ResponseBody
    public void downloadFile(HttpServletRequest request, HttpServletResponse response, String attachmentId) throws Exception{
        if (!attachmentId.equals("")) {
            Tattachment attachment = attachmentService.gets(attachmentId);
            if (attachment != null) {
                String fileName = attachment.getFileName();
                String filePath = attachment.getFilePath();
                BufferedInputStream in = null;
                BufferedOutputStream out = null;
                request.setCharacterEncoding("UTF-8");
                String rootpath = request.getSession().getServletContext().getRealPath("/");
                try {
                    
                    File f = new File(rootpath + "//" + filePath);
                    response.setContentType("application/x-excel");
                    response.setCharacterEncoding("UTF-8");
                    response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
                    response.setHeader("Content-Length", String.valueOf(f.length()));
                    in = new BufferedInputStream(new FileInputStream(f));
                    out = new BufferedOutputStream(response.getOutputStream());
                    byte[] data = new byte[1024];
                    int len = 0;
                    while (-1 != (len = in.read(data, 0, data.length))) {
                        out.write(data, 0, len);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (in != null) {
                        in.close();
                    }
                    if (out != null) {
                        out.close();
                    }
                }
            }
        }
    }

    /**
     * 根據傳入的虛擬路徑獲取物理路徑
     * 
     * @param path
     * @return
     */
    private String getPhysicalPath(String path) {
        String servletPath = this.request.getServletPath();
        String realPath = this.request.getSession().getServletContext().getRealPath(servletPath);
        return new File(realPath).getParent() + "/" + path;
    }

    /**
     * 根據傳入的虛擬路徑獲取物理路徑(相對應根路徑)
     * 
     * @param path
     * @return
     * @author fengjx
     * @date 2014年3月10日
     */
    private String getPhysicalPathByRoot(String path) {
        String realPath = this.request.getSession().getServletContext().getRealPath("/");
        return new File(realPath).getPath() + "/" + path;
    }
}

 

http://files.cnblogs.com/files/xsmhero/uploadify.rar

相關文章