如何从Grails中的上传文件中获取字节(byte [])
发布时间:2020-12-14 16:32:58 所属栏目:大数据 来源:网络整理
导读:我有一个像这样的上传表单(form.gsp): htmlhead titleUpload Image/title meta name="layout" content="main" //head body g:uploadForm action ="upload" Photo: input name="photos" type="file" / g:submitButton name="upload" value="Upload" / /g:upl
我有一个像这样的上传表单(form.gsp):
<html> <head> <title>Upload Image</title> <meta name="layout" content="main" /> </head> <body> <g:uploadForm action ="upload"> Photo: <input name="photos" type="file" /> <g:submitButton name="upload" value="Upload" /> </g:uploadForm> </body> </html> 我希望用户上传任何图片,当他点击上传按钮时,我需要一些方法来获取控制器操作中的图像并将其传递给视图: def upload = { byte[] photo = params.photos //other code goes here . . . . } 这会引发错误: Cannot cast object 'org.springframework.web.multipart.commons.CommonsMultipartFile@1b40272' with class 'org.springframework.web.multipart.commons.CommonsMultipartFile' to class 'byte' 请注意,我不希望这些照片保存在我的数据库中.实际上,一旦完成上传操作,我将处理该图像并在上传视图中显示输出.如果我有一个解决方案,那将是件好事. 提前致谢. 解决方法
如果您要上传文件,请不要将其存储,并将其显示在< img>中.在下一个请求中的另一个视图中,您可以暂时将其存储在会话中:
的grails-app /控制器/ UploadController.groovy: def upload = { def file = request.getFile('file') session.file = [ bytes: file.inputStream.bytes,contentType: file.contentType ] redirect action: 'elsewhere' } def elsewhere = { } def image = { if (!session.file) { response.sendError(404) return } def file = session.file session.removeAttribute 'file' response.setHeader('Cache-Control','no-cache') response.contentType = file.contentType response.outputStream << file.bytes response.outputStream.flush() } 在grails-app /视图/上传/ form.gsp: <g:uploadForm action="upload"> <input type="file" name="file"/> <g:submitButton name="Upload"/> </g:uploadForm> 在grails-app /视图/上传/ elsewhere.gsp: <img src="${createLink(controller: 'upload',action: 'image')}"/> 该文件可用于单个请求(因为我们在显示时将其删除).您可能需要针对错误情况实施一些额外的会话清理. 您可以轻松地调整它以保留多个文件(如果您尝试上传一堆照片上传),但请记住每个文件占用内存. 使用会话的另一种方法是使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |