如何在Grails中转换字节文件大小

时间:2015-04-03 19:09:57

标签: grails gsp

我正在上传文件并向用户显示文件名,文件日期和文件大小。

唯一的问题是当我显示文件大小时,它以字节显示,因此一个4 MB的文件将是4000000

这没有用。然而有人告诉我,Grails有一个默认的转换器。我看着他们的图书馆找不到任何东西。 有没有一种简单的方法可以用grails转换它?

以下是控制器中的上传方法

def upload() {
    def uploadedFile = request.getFile('file')
    if(uploadedFile.isEmpty())
    {
        flash.message = "File cannot be empty"
    }
    else
    {
        def documentInstance = new Document()
        documentInstance.filename = uploadedFile.originalFilename
        //fileSize
         documentInstance.fileSize = uploadedFile.size
        documentInstance.fullPath = grailsApplication.config.uploadFolder + documentInstance.filename
        uploadedFile.transferTo(new File(documentInstance.fullPath))
        documentInstance.save()
    }
    redirect (action: 'list')
}

我的gsp视图表,这是用户看到的

<table class="table-bordered" data-url="data1.json" data-height="299">
    <thead>
        <tr>
            <g:sortableColumn property="filename" title="Filename" />
            <g:sortableColumn property="fileSize" title="file Size" />
            <g:sortableColumn property="uploadDate" title="Upload Date" />
        </tr>
    </thead>
    <tbody>
    <g:each in="${documentInstanceList}" status="i" var="documentInstance">
        <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
            <td><g:link action="download" id="${documentInstance.id}">${documentInstance.filename}</g:link></td>
            <td><g:link id="${documentInstance.id}">${documentInstance.fileSize}></g:link></td>
            <td><g:formatDate date="${documentInstance.uploadDate}" /></td>
            <td><span class="button"><g:actionSubmit class="delete" controller="Document" action="delete" value="${message(code: 'default.button.delete.label', default: 'Delete')}" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Are you sure?')}');" /></span></td>
        </tr>
    </g:each>
    </tbody>

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试将字节值转换为兆字节 例如 : 10485761 MB

为此,您需要创建自定义标记库。 taglib的简单示例可满足您的要求:

class FormatTagLib {
    def convertToMB = { attrs, body ->
        Integer bytes = attrs.value
        Float megabytes = bytes/(1024*1024)
        out << "${megabytes} MB"
    }
}

在gsp中,

<g:convertToMB value="true"/>

您可以查看custom tag library here的详细信息。