加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何从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')}"/>

该文件可用于单个请求(因为我们在显示时将其删除).您可能需要针对错误情况实施一些额外的会话清理.

您可以轻松地调整它以保留多个文件(如果您尝试上传一堆照片上传),但请记住每个文件占用内存.

使用会话的另一种方法是使用MultipartFile#transferTo(File)将文件传输到磁盘上的临时位置并从那里显示它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读