springmvc实现web多文件上传

首先需要在springmvc中配置如下:

<bean id="multipartResolver"                
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="uploadTempDir" value="/uploadTemp" />  <!-- 临时目录 -->
        <property name="maxUploadSize" value="-1"/><!-- -1为不限制文件大小 -->
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="resolveLazily" value="false"/>
</bean>

jsp页面中需要通过form表单实现文件上传,form表单如下:

<form id="uploadForm" action="<%=path%>/document/uploadFile.do" enctype="multipart/form-data" method="post">
    <table>
        <tr>
            <td>选择附件:</td>
            <td colspan="3">
                <!--去掉input中的multiple属性即为单文件上传-->
                <input type="file" name="fileIds" multiple onchange="doUpload()"/>
            </td>
        </tr>
    </table>
</form>

表单中监听选中文件后的onChange事件的方法如下:

        function doUpload() {
            // 提交表单前可以做一些其他操作
            $("#uploadForm").submit();
        }

服务端Controller的写法如下:

    // 上传附件
    @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
    public ModelAndView uploadFile(@RequestParam("fileIds") MultipartFile[] tmpFiles, 
        HttpServletRequest request, HttpSession session) {

        // 此处写上传完成后转向的页面地址
        ModelAndView modelAndView = new ModelAndView("document/fileIframe");

        // 文件物理存储路径目录 D:/tomcat/webapp/cms/uploads/201705
        String savePath = session.getServletContext().getRealPath("/uploads/" + dateToStr(new Date(), "yyyyMM"));

        // 文件下载路径目录(相对路径) /cms/uploads/201705
        String downloadPath = request.getContextPath().concat("/uploads/" + dateToStr(new Date(), "yyyyMM") + "/");

        // 上传附件数据存在
        if (tmpFiles != null && tmpFiles.length > 0) {
            // 循环临时文件,对单文件上传同样效果
            for (MultipartFile tmpFile : tmpFiles) {
                // 获取原始文件名
                String fileName = tmpFile.getOriginalFilename();
                // 文件名加日期和随机数防止重名
                String formatDate = new SimpleDateFormat("yyMMddHHmmss").format(new Date());
                int random = new Random().nextInt(10000);
                String extension = fileName.substring(fileName.lastIndexOf(".") + 1);
                fileName = fileName.substring(0, fileName.lastIndexOf(".")) +
                         formatDate + random + "." + extension;
                try {
                    // 将临时文件转存为正式文件(物理存储目录+带有随机数的文件名)
                    tmpFile.transferTo(new File(savePath + "/" + fileName));
                } catch (IOException e) {
                    e.printStackTrace();
                    return modelAndView;
                }
            }
            // 此处可以将上面的文件加入,返回页面展示或其他操作
            // modelAndView.addObject("files", "");
            return modelAndView;
        }
        return modelAndView;
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值