上传下载

循环添加/删除上传文件
初始
没有限制格式
添加/删除文件

<script>
var i = 1; 
$(document).ready(function(){  
    $("#btn_add1").click(function(){ //添加
        var temp = '<div id="file_'+i+'"><input  name="newFileName_'+i+'" type="file" /><input type="button" value="删除"  onclick="del_1('+i+')"/></div>'; 
        $(temp).appendTo($("#newFileNameAdd"));
          i = i + 1;  
    });  
}); 
//删除的方法 
function del_1(o){  
 document.getElementById("newUploadAdd").removeChild(document.getElementById("file_"+o));  
}  
</script>

<form id="" enctype="multipart/form-data" method="post">
<tr>
    <td align="center" style="background-color: #E7F3FB; vertical-align: middle;" width="20%" height="100px">
    <font size="3">上传文件</font>
    </td>
    <td align="left" style="vertical-align: middle;">
        <div id="newFileNameAdd">
            <input type="file" name="newFileName" />
        </div>
        <input type="button" id="btn_add1" value="增加一行" >
    </td>
</tr>

业务逻辑

    public List<Map<String, Object>> upload(HttpServletRequest request, String orderId) throws Exception {  
        //入参String orderId,作为文件名。可不要该入参,也可添加其他入参
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        String nowday = sdf.format(today);

        List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();  
        Map<String, Object> res=new HashMap<String, Object>();

        MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;  
        Map<String, MultipartFile> fileMap =mRequest.getFileMap();  
        //getRealPath("/")指代项目根目录,所以代码返回的是项目在容器中的实际发布运行的根路径
        // private static final String UPLOADDIR = "uploadUserDir/"; 
        String uploadDir = request.getSession().getServletContext().getRealPath("/")
                + FileOperateUtil.UPLOADDIR 
                + nowday + "/"; //D:\Work\项目名\src\main\webappuploadUserDir/日期/

        File file = new File(uploadDir);  //D:\Work\项目名\src\main\webappuploadUserDir\日期
        if (!file.exists()) {//不存在时候,创建文件或者文件夹
            file.mkdirs();  // 注意与file.mkdir()的区别
        }  
       Iterator<Map.Entry<String, MultipartFile>> it = fileMap.entrySet().iterator();//迭代器
        while (it.hasNext()) {  
            Map.Entry<String, MultipartFile> entry = it.next();  
            MultipartFile mFile = entry.getValue();  
            //取得上传文件  
            String lFileName = "";
            String path = "";
            if(mFile != null){  
                String myFileName = mFile.getOriginalFilename();//取得当前上传文件的文件名称  
                //如果名称不为"",说明该文件存在,否则说明该文件不存在  
                if(myFileName.trim() !=""){  
                    lFileName = orderId + "-" + mFile.getOriginalFilename();//重命名上传后的文件名    
                    path = uploadDir + lFileName; //定义上传路径  
                    File localFile = new File(path); 
                    if (localFile.exists()){
                        logger.error("文件地址:" + path + "已存在内容!");
                        continue;
                    }
                    Long preTime =  System.currentTimeMillis(); //记录上传过程起始时间 
                    try {
                        mFile.transferTo(localFile);//上传
                    } catch (Exception e) {
                        e.printStackTrace();
                        res.put("err", "异常信息"+e.getMessage());
                        result.add(res);
                        return result;  
                    } 
                    Long finalTime =  System.currentTimeMillis();  
                    System.out.println(finalTime - preTime);//记录上传文件的时间  
                }  
            }  
            String  fileName = mFile.getOriginalFilename(); 

            //将路径保存到数据库中,以备下载
            TrFillRefInfo ffInfo = new TrFillRefInfo();
            ffInfo.setFileId(fInfoDao.getTableKey("TRFILLREFINFO"));
            ffInfo.setOpSq(opSq);
            ffInfo.setTktNo(tktNo);
            ffInfo.setUploadFileName(fileName);
            ffInfo.setSavePath(path);
            try {
                fInfoDao.save(ffInfo);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }  
        res.put("suc", "sucess");
        result.add(res);
        return result;  
    } 

mkdir()创建此抽象路径名称指定的目录(及只能创建一级的目录,且需要存在父目录)
mkdirs()创建此抽象路径指定的目录,包括所有必须但不存在的父目录。(及可以创建多级目录,无论是否存在父目录)

上传前
上传成功后文件路径及文件名
上传成功后

下载

<td align="center" id="orderId">${fillRefundDto.orderId}(controller层返回的对象)</td>

<tr>
<td align="center" style="background-color: #E7F3FB; vertical-align: middle;" width="20%" >
    <font >已上传文件列表:</font>
</td>
<td>
    <select id="upDownFile">
        <c:forEach items="${refInfoVO}" var="re">
            <option value="${re.uploadFileName}">${re.uploadFileName}</option>
        </c:forEach>
    </select>
    <input type="button" value="下载" style="font:size=3;" onclick="download()"/>
</td>
</tr>

对应js方法



function download() {
    //var postData={};
    //postData["orderId"]=$("#orderId").text();//需要的参数
    //postData["uploadFileName"]= $("#upDownFile option:selected").text();
    window.open('${pageContext.request.contextPath}/*Controller/download?orderId='  
        +$("#orderId").text()
        + '&uploadFileName='
        + $("#upDownFile  option:selected").text());
    }

下拉框选择下载文件

controller层对应方法

@RequestMapping("/download")
    public void downloadFile(HttpServletRequest request,HttpServletResponse response) {
        String orderId = request.getParameter("orderId");
        String uploadFileName = request.getParameter("uploadFileName");
        //根据入参查询数据库,得到其余字段信息
        TrFillRefInfo fInfo = fillRefundService.getDownloadFile(orderId,uploadFileName);
        try {
            response.setContentType("text/html;charset=UTF-8");
            request.setCharacterEncoding("UTF-8");

            String downLoadPath = fInfo.getSavePath();//得到文件保存的路径
            File file = new File(downLoadPath); 
            //file =D:\Work\项目名\src\main\webappuploadUserDir\2017-11-08\B10063-1.png
            String filename = fInfo.getUploadFileName();
            //filename =1.png(文件名)
            InputStream fis;
            fis = new BufferedInputStream(new FileInputStream(downLoadPath));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            response.reset();
            // 先去掉文件名称中的空格,然后转换编码格式为utf-8,保证不出现乱码,这个文件名称用于浏览器的下载框中自动显示的文件名
            response.addHeader("Content-Disposition", "attachment;filename="
                    + new String(filename.replaceAll(" ", "").getBytes("utf-8"),
                            "iso8859-1"));
            response.addHeader("Content-Length", "" + file.length());
            OutputStream os = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            os.write(buffer);// 输出文件
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值