Spring java上传文件以及过滤器验证

1.jsp form表单需要加个属性enctype="multipart/form-data",而一旦form表单用了enctype="multipart/form-data"类型后,所有的值 都是以二进制进行传递的,所以当我们想取出这个表单里传递过来的其它变量的时候,就会取不到传递过来的变量。下面具体说下解决方法。

2.pom.xml添加依赖

    <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

3.过滤器验证
        String sessionToken = (String) session.getAttribute("_token");
        if (req.getContentType() != null&&req.getContentType().contains("multipart/form-data")) {
            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
            MultipartHttpServletRequest multipartRequest = multipartResolver.resolveMultipart((HttpServletRequest) req);
            String requestToken = multipartRequest.getParameter("_token");
            if (StringUtils.isEmpty(requestToken) || StringUtils.isEmpty(sessionToken)) {
                httpRes.sendError(404);
                return;
            }
           /**
            * 项目要求验证的内容.........
            */
            httpReq=multipartRequest;
            req=multipartRequest;
            chain.doFilter(httpReq, res);
        }

4. jsp上传按钮,文件上传按钮自带的样式很丑,而且各个浏览器的还不一致,如果想换一个好看的样式可以自己改下(建议:可以把默认按钮设成透明,然后在默认按钮底层加上自己想要的样式,如果不需要改样式的话,只要红字部分代码就行了)

jsp 代码:

<div class="fbox in-blc">
<input οnchange="fileUpload()" type="file" id="file" name="file" value="" class="file" />
<input id="filebtn" class="filebtn blue" type="button" value="上传" />
</div>

css代码:

#Content input.filebtn{

    width: 100px;
    padding: 5px 0;
    margin: 5px;
    float: left;
    border: none;
    color: #fff;
    letter-spacing: 2px;
    font-size: 13px;
    font-weight: bold;
}
#Content input.filebtn:hover{
    cursor: pointer;
    transition-property: all ;
    transition-duration: 0.3s ;
}
#Content input.file{
    height:30px;
    line-height:30px;
    display:block;
    width: 130px;
    border: none;
    margin-left:-20px;
    position: absolute;
    letter-spacing: 2px;
    font-size: 100px;
    font-weight: bold;
    z-index: 1;
    opacity: 0;
}
#Content input.file:hover{
    cursor: pointer;
    transition-property: all ;
    transition-duration: 0.3s ;
}

.in-blc{
    display: inline-block;
    margin-top: 10px;
    overflow:hidden;
   } 

5.取得文件地址
            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
            String path = "";
            if (multipartResolver.isMultipart((HttpServletRequest) request)) {
                Iterator<String> iter = ((MultipartHttpServletRequest) request).getFileNames();
                while (iter.hasNext()) {
                    MultipartFile f = ((MultipartHttpServletRequest) request).getFile(iter.next());
                    if (f != null) {                      
                        String myFileName = f.getOriginalFilename();
                        String tempFileName = "tempFile.csv";
                        if (myFileName != null && myFileName.trim() != "") {
                            path = "D:\\’" + tempFileName;
                            File localFile = new File(path);                     
                            f.transferTo(localFile);
                        }
                    }
                }
            }

6.处理完临时文件后,记得把临时文件删除。

        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值