Grails3.1.14 上传

本文介绍了一种基于GSP页面实现文件上传的方法,并详细解释了如何通过配置解决上传小文件时出现的问题。包括使用ajaxSubmit进行异步提交、获取上传文件及在不同配置文件中的配置差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gsp页面

<!-- enctype可以去掉……g:uploadForm会映射成普通的带enctype的form-->
<g:uploadForm name="upLoadForm" method="post" enctype="multipart/form-data" controller="websiteOperate" action="uploadFile">
    <div class="uploading-icon">
        <input id="payload" type="file" name="payload" class="uploading-camera-btn" />上传简历
    </div>
</g:uploadForm>


$("#upLoadForm").ajaxSubmit({
    type:'POST',
    dataType : "json", //异步返回类型定义
    success:function (data) {
        if(data.success){   
        }
    }
})

controller

//request是multipartHttpServletRequest
 def uploadedFile = request.getFile('payload');//payload是页面上file input的name
//uploadedFile是MultipartFile类,参考api:http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/multipart/MultipartFile.html
String  originalFilename = uploadedFile.originalFilename; //附件名称
int size = uploadedFile.size; //附件大小
def uploadFileInputStream = uploadedFile.inputStream; //获取流
render ([contentType: "application/json", text: result as JSON]) //异步返回json

配置文件

一开始是在resources.groovy里面配置的,配置如下:


// Place your Spring DSL code here
beans = {
    //  默认上传文件大小
    multipartResolver(StandardServletMultipartResolver){
        maxUploadSize = 41943040 // 40MB
        maxInMemorySize = 1048576
    }
}

但遇到一个怪问题,就是上传的时候,附件如果小于120kb左右的时候(测试了十几个附件上传才找到的规律……),request.getFile(‘payload’)都会为null,但是在f12里面看请求域里面的东西都是正常的。后来看到一篇文章解决,但没有理解真正原因(文章地址:https://github.com/grails/grails-core/issues/9680【如果有理解的指教一下……】)……根据文章讲解,将原本在resources.groovy里的配置改为在application.yml里进行配置,配置如下:

grails:
    controllers:
        defaultScope: singleton
        upload:
            maxRequestSize: 1048576
            maxFileSize: 1048576

仅仅发现,第一种配置,用的是CommonsMultipartResolver,而第二种是StandardServletMultipartResolver。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值