一.ftl

<form action="" method="post" name="form" id="form">
        <div class="m-solbox m-solbox-3">

            <div style="margin-left:180px">
            <table style="border-collapse: separate;border-spacing: 10px;font-size: 14px;">
                <tr>
                    <td>版本:
                        <input type="hidden" name="id" value="" >
                    </td>
                </tr>

                <tr>
                    <td>上传附件:</td>
                    <td>
                        <input id="uploadFile" type="file" name="fileName" multiple />
                    </td>
                </tr>
                <#if files??>
                <tr>
                    <td>已有附件:</td>
                    <td>
                        <#escape x as x!"">
                        <#list files as fileName >
                        <span>
                            <a href="${filePaths[fileName_index]}">${fileName}</a>
                            <a href="###" title="删除" onclick='deleteFile(this,"${fileName}")'>
                                <img src="/img/nav/Trash_Delete.png" style="border: none">
                            </a>
                        </span>
                        </#list>
                        </#escape>
                    </td>
                </tr>
                </#if>
            </table>
                </div>
        </div>
</form>

引入文件:
<link href="/css/flash/fileinput.css" media="all" rel="stylesheet" type="text/css" />
<script src="/js/base/fileinput.js" type="text/javascript"></script>

二.js : proReports.js

$(document).ready(function(){
    initFileInput("uploadFile");
});

function initFileInput(ctrlName) {
    var control = $('#' + ctrlName);
    control.fileinput({
        uploadUrl: '/file/uploadFile',
        language: "zh",
        //showUpload: false,               //是否显示上传按钮
        dropZoneEnabled: false,         //是否显示拖拽区域
        enctype: 'multipart/form-data',
        uploadExtraData: {  //上传的时候,增加的附加参数
            "projectId": $("#project_id").val(),
            "versionId": $("#versionId").val(),
            "fea": $("#fea").val()
        }
    })//文件上传完成后的事件
    .on('fileuploaded', function (event, data, previewId, index) {
        var response = data.response;
        //alert(response.msg);
        window.location.reload();
    });
}

function deleteFile(obj,deleteFile){
    if(confirm('确认要删除么?')){
        $.ajax({
            type: 'POST',
            url: '/pro/deleteFile',
            data:{
               "projectId": $("#project_id").val(),
               "versionId": $("#versionId").val(),
               "fea": $("#fea").val(),
               "deleteFile":deleteFile,
            },
            cache:false,
            dataType : "json",
            success: function(data){
                if(data.msg=="删除失败"){
                    alert(data.msg);
                }else{
                   $(obj).parent().remove();
                }
            }
         });
    }
}

三.上传文件的controller :ProEmailAttachmentController

@RequestMapping(value="/file/uploadFile",method = RequestMethod.POST)
    public @ResponseBody Map<String, Object>  uploadFile(@RequestParam("fileName") MultipartFile[]  file,HttpServletRequest request) throws Exception{
        String projectIdStr = request.getParameter("projectId");
        Integer projectId = Integer.valueOf(projectIdStr);
        String fea = request.getParameter("fea");
        String versionIdStr=request.getParameter("versionId");
        Integer versionId = Integer.valueOf(versionIdStr);
        String msg = "";
        try {
            //上传
            String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
            path=path+"folderPath.properties";
            Properties prop = new Properties();
            prop.load(new FileInputStream(path));
            String uploadPath =prop.getProperty("UploadMailPath")+"/"+projectId+"/"+fea+"/"+versionId;
            for (int i = 0; i < file.length; i++) {
                if (!file[i].isEmpty()) {
                    // 文件名称
                    File targetFile = new File(uploadPath, file[i].getOriginalFilename());
                    if (!targetFile.exists()){
                        targetFile.mkdirs();
                    }
                    file[i].transferTo(targetFile);
                }
            }
         } catch (Exception e) {
            e.printStackTrace();
            logger.info(e.getMessage());
            msg = "上传失败!";
         }
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("msg", msg);
        map.put("code", 200);
        return map;
    }

@RequestMapping(value="/pro/deleteFile",method = RequestMethod.POST)
    public @ResponseBody Map<String, Object>  deleteFile(HttpServletRequest request) throws Exception{
        String projectIdStr = request.getParameter("projectId");
        Integer projectId = Integer.valueOf(projectIdStr);
        String fea = request.getParameter("fea");
        String versionIdStr=request.getParameter("versionId");
        Integer versionId = Integer.valueOf(versionIdStr);
        String deleteFile=request.getParameter("deleteFile");
        String msg = "";
        try {
            //上传
            String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
            path=path+"folderPath.properties";
            Properties prop = new Properties();
            prop.load(new FileInputStream(path));
            String uploadPath =prop.getProperty("UploadMailPath")+"/"+projectId+"/"+fea+"/"+versionId;
            File targetFile = new File(uploadPath, deleteFile);
            if (targetFile.exists()){
                targetFile.delete();
            }
         } catch (Exception e) {
            e.printStackTrace();
            logger.info(e.getMessage());
            msg = "删除失败!";
         }
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("msg", msg);
        map.put("code", 200);
        return map;
    }

4.获取文件的Controller :ProReportController

@RequestMapping(value = "/pro/report", method = RequestMethod.GET)
    public String home(HttpServletRequest request, Model model) throws FileNotFoundException, IOException {
        String projectIdStr = request.getParameter("projectId");
        Integer projectId = Integer.valueOf(projectIdStr);
        model.addAttribute("productId", projectId);
        Project project = systemService.getProjectByProjectId(projectId);
        List<Version> versionList = systemService.getVersionByProjectId(projectId);
        FeatureEmail featureEmail = this.featureEmailMngr.getFeatureEmailByProductIdAndFea(projectId, "0");
        String[] checkEmails = null;
        if(featureEmail != null && !CheckUtils.isNullOrBlank(featureEmail.getCheckEmail())) {
            checkEmails = featureEmail.getCheckEmail().split(",");
        }

        String user = this.authService.getCookieParameter(request, "token","userid").split(" ")[0];
        model.addAttribute("user", user);
        //        处理邮件主题
        StringBuffer subject=new StringBuffer();
        subject.append("【请阅:PDU一部产品与解決方案测试部】");
        subject.append(project.getName().split("-")[0]+" ");
        subject.append("产品测试报告");
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        subject.append("("+df.format(new Date())+")");
        model.addAttribute("subject", subject);
        if (CheckUtils.isNullOrBlank(versionList)){
            model.addAttribute("isFind", new Boolean(false));
            return "/productkanban/report";
        }else {
            model.addAttribute("isFind", new Boolean(true));
        }
        model.addAttribute("featureEmail", featureEmail);
        model.addAttribute("checkEmails", checkEmails);
        //处理已有附件
        String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
        path=path+"folderPath.properties";
        Properties prop = new Properties();
        prop.load(new FileInputStream(path));
        String uploadPath =prop.getProperty("UploadMailPath")+"/"+projectId+"/0/"+versionId;
        File destDir = new File(uploadPath);
        if (destDir.exists()) {
            List<String> files = FileUtils.getFile(uploadPath);
            if(!CheckUtils.isNullOrBlank(files)){
                List<String> filePaths = new ArrayList<String>();
                for(String fileName:files){
                    filePaths.add(prop.getProperty("UploadMailURL")+"/"+projectId+"/0/"+versionId+"/"+fileName);
                }
                model.addAttribute("files", files);
                model.addAttribute("filePaths", filePaths);
            }
        }
        return "/productkanban/report";
    }

fileInput插件上传文件的更多相关文章

  1. Extjs 使用fileupload插件上传文件 带进度条显示

    一.首先我们看看官方给出的插件的解释: 一个文件上传表单项具有自定义的样式,并且可以控制按钮的文本和 像文本表单的空文本类似的其他特性. 它使用一个隐藏的文件输入元素,并在用户选择文件后 在form提 ...

  2. 用jquery uploadify上传插件上传文件

    public void ProcessRequest(HttpContext context) { string esOIDs = System.Web.HttpContext.Current.Req ...

  3. 后台使用Spring MVC 4.15 版本 通过 ajaxFileUpload plugin插件上传文件相应时引起的一个小问题,Chrome、Firefox中出现SyntaxError:unexpected token <

    html: 使用ajaxFileUpload插件做文件上传时,后台返回json格式的数据,js代码如下: 接下来,把结果错误信息打印出来: 先在网上找了下解决办法方案,stackoverflow上有说 ...

  4. 使用SWFUpload插件上传文件

    演示代码由两部分组成,包括前台文件和后台文件: 1.前台文件index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transi ...

  5. 《五》uploadify插件上传文件

    下载地址:http://www.uploadify.com/wp-content/uploads/files/uploadify.zip 相关配置:http://www.uploadify.com/d ...

  6. ajaxFileUpload插件上传文件 返回 syntaxError :unexpected token

    Html 代码<table id="deploy_application" class="bordered-table"> <tr> & ...

  7. ajaxFileUpload上传文件简单示例

    写在前面: 上传文件的方式有很多,最近在做项目的时候,一开始也试用了利用jquery的插件ajaxFileUpload来上传大文件,下面,用一个上传文件的简单例子,记录下,学习的过程~~~ 还是老样子 ...

  8. php 应用 bootstrap-fileinput 上传文件 插件 操作的方法

    //先加载插件所需要的 js .css 文件 <link href="css/fileinput.css" rel="stylesheet" type=& ...

  9. bootstrap-fileinput上传文件的插件使用总结----编辑已成功上传过的图片

    http://plugins.krajee.com/file-plugin-methods-demo 具体操作 http://plugins.krajee.com/file-preview-manag ...

随机推荐

  1. C++多线程同步技巧(四)--- 信号量

    简介 信号量是维护0到指定最大值之间的同步对象.信号量状态在其计数大于0时是有信号的,而其计数是0时是无信号的.信号量对象在控制上可以支持有限数量共享资源的访问,可以用于线程同步,预防死锁等领域. 信 ...

  2. Kali 2.0 Web后门工具----WebaCoo、weevely、PHP Meterpreter

    注:以下内容仅供学习使用,其他行为均与作者无关!转载请注明出处,谢谢! 本文将介绍 Kali 2.0 版本下的三款Web后门工具:WebaCoo.weevely.PHP Meterpreter,这类工 ...

  3. PHP匿名函数

    PHP匿名函数 匿名函数(Anonymous functions),也叫闭包函数(closures),允许临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值. 举例: &l ...

  4. June 4. 2018 Week 23rd Monday

    Don't criticize what you can't understand. 不懂的,不要随意批判. From Bob Dylan. Don't criticize what you can' ...

  5. WIndows 使用VS编译 Lua5

    从Lua5.1开始官方给出的文件只有源代码和makefile文件了,官网给出的bulid方式也是在linux平台,如果只是想找个库使用下可以到这里来下载:http://joedf.ahkscript. ...

  6. #006 C语言大作业学生管理系统第三天

    还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...

  7. JAVA 容易忽略的东西

    Java中的取余会出现负数.用Math.floorMod()方法可以掰正,但是也仅限被除数是负数的情况,如果除数是负数,这个没用. 和C不一样,Java中的字符串是不可变字符串,不能修改Java字符串 ...

  8. mysql 数据备份与数据导入到出

    一.数据备份 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境.但不能恢复到异构系统中如Windows. #2. 逻辑备份: 备份的是建表.建库.插入等操作所执行SQL语句,适用于中小型数 ...

  9. 比MR至少快5倍的神器,竟然是它

    Hive简介 Hive是一个基于 Hadoop 的开源数据仓库工具,用于存储和处理海量结构化数据.它最初是应Facebook对每天产生的海量新兴社会网络数据进行管理和机器学习的需求而产生和发展的,Hi ...

  10. UVA12569-Planning mobile robot on Tree (EASY Version)(BFS+状态压缩)

    Problem UVA12569-Planning mobile robot on Tree (EASY Version) Accept:138  Submit:686 Time Limit: 300 ...