Grails 3上传文件限制大小
Grails 3 upload file limit size
我在做什么以及发生了什么?
我正在尝试在 grails 中上传文件并下载它们。制作完成后,我仍然面临一个问题,当文件很大时。这是例外情况:
Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException:
the request was rejected because its size (3553808) exceeds the configured maximum (128000)
我的尝试和结果:
我之前在 this question 中找到这个问题,答案是放置一些 配置变量 :
grails:
controllers:
upload:
maxFileSize: (10 * 1024 * 1024)
maxRequestSize: (10 * 1024 * 1024)
但仍然出现同样的错误。我还尝试添加一些依赖项 said here。或者关闭 IDE 并重建。什么都解决不了。
有人遇到过这个问题并能解决吗?
以下使用 grails 3.2 及以上版本对我来说工作正常
我们将允许上传 25MB 的文件。
25 * 1024 * 1024 = 26.214.400 字节
我的/grails-app/conf/application.yml
grails:
controllers:
upload:
maxFileSize: 26214400
maxRequestSize: 26214400
我的my.gsp
文件
<g:form action="saveImage" enctype="multipart/form-data" method="POST">
<input type="file" placeholder="Select file" name="file">
<g:submitButton value="Upload File"/>
</g:form>
我的 controller
操作
def saveImage(){
def fileName = ''
def uploadedFile = request.getFile('file')
if (uploadedFile)
if (!uploadedFile.empty) {
try {
int dot = uploadedFile.originalFilename.lastIndexOf('.');
def fileExt = uploadedFile.originalFilename.substring(dot + 1);
fileName = ("myFile." + fileExt).toString()
def basePath = ''
if (Environment.current == Environment.PRODUCTION) {
basePath ='/var/local/prj/uploads/' // this works with production and tested on Ubuntu OS
} else {
basePath = grailsApplication.mainContext.servletContext.getRealPath('/uploads/') // this will take your project directory path Project\src\main\webapp\uploads folder
}
uploadedFile.transferTo(new File(basePath + fileName))
} catch (Exception e) {
e.printStackTrace()
}
}
// Your redirect code here
}
下载文件操作
def file = new File("Your file path")
if (file.exists()) {
response.setContentType("application/octet-stream") // or or image/JPEG or text/xml or whatever type the file is
response.setHeader("Content-disposition", "attachment;filename=\"${file.name}\"")
response.outputStream << file.bytes
} else
render "File does not exist!"
希望对您有所帮助
问题出在配置变量的分配上。我在没有运算符的情况下分配它们:
maxFileSize: 10485760
maxRequestSize: 10485760
而不是:
maxFileSize: (10 * 1024 * 1024)
maxRequestSize: (10 * 1024 * 1024)
我就是这样解决问题的。
我在做什么以及发生了什么?
我正在尝试在 grails 中上传文件并下载它们。制作完成后,我仍然面临一个问题,当文件很大时。这是例外情况:
Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException:
the request was rejected because its size (3553808) exceeds the configured maximum (128000)
我的尝试和结果:
我之前在 this question 中找到这个问题,答案是放置一些 配置变量 :
grails:
controllers:
upload:
maxFileSize: (10 * 1024 * 1024)
maxRequestSize: (10 * 1024 * 1024)
但仍然出现同样的错误。我还尝试添加一些依赖项 said here。或者关闭 IDE 并重建。什么都解决不了。
有人遇到过这个问题并能解决吗?
以下使用 grails 3.2 及以上版本对我来说工作正常
我们将允许上传 25MB 的文件。
25 * 1024 * 1024 = 26.214.400 字节
我的/grails-app/conf/application.yml
grails:
controllers:
upload:
maxFileSize: 26214400
maxRequestSize: 26214400
我的my.gsp
文件
<g:form action="saveImage" enctype="multipart/form-data" method="POST">
<input type="file" placeholder="Select file" name="file">
<g:submitButton value="Upload File"/>
</g:form>
我的 controller
操作
def saveImage(){
def fileName = ''
def uploadedFile = request.getFile('file')
if (uploadedFile)
if (!uploadedFile.empty) {
try {
int dot = uploadedFile.originalFilename.lastIndexOf('.');
def fileExt = uploadedFile.originalFilename.substring(dot + 1);
fileName = ("myFile." + fileExt).toString()
def basePath = ''
if (Environment.current == Environment.PRODUCTION) {
basePath ='/var/local/prj/uploads/' // this works with production and tested on Ubuntu OS
} else {
basePath = grailsApplication.mainContext.servletContext.getRealPath('/uploads/') // this will take your project directory path Project\src\main\webapp\uploads folder
}
uploadedFile.transferTo(new File(basePath + fileName))
} catch (Exception e) {
e.printStackTrace()
}
}
// Your redirect code here
}
下载文件操作
def file = new File("Your file path")
if (file.exists()) {
response.setContentType("application/octet-stream") // or or image/JPEG or text/xml or whatever type the file is
response.setHeader("Content-disposition", "attachment;filename=\"${file.name}\"")
response.outputStream << file.bytes
} else
render "File does not exist!"
希望对您有所帮助
问题出在配置变量的分配上。我在没有运算符的情况下分配它们:
maxFileSize: 10485760
maxRequestSize: 10485760
而不是:
maxFileSize: (10 * 1024 * 1024)
maxRequestSize: (10 * 1024 * 1024)
我就是这样解决问题的。