【问题标题】:Grails JQuery UI Progress BarGrails JQuery UI 进度条
【发布时间】:2014-06-14 00:00:51
【问题描述】:

我正在尝试在 Grails 应用程序中使用 jQuery UI 进度条进行文件上传。我正在使用 g:uploadForm 提交文件,但我不确定如何获取 XMLHttpRequest 对象以获取传输字节流的进度,以便将参数提供给 jQuery UI 进度条自行更新。这是我到目前为止正在尝试的,但没有运气。我将非常感谢任何指导。

$("#progressbar").progressbar({
            value: false,
            change: function() {
                $(".progress-label").text( $("#uploadErrors").progressbar( "value" ) + "%" );
            },
            complete: function() {
                $(".progress-label").text( "Complete!" );
            }
        });
        $(".uploaderForm").submit();
        //var fileSize = $("#chseFile")[0].files[0].size;

        var request = new XMLHttpRequest();

        request.upload.addEventListener('progress', function(event) {
            var percent = event.loaded / event.total;
            console.log(percent);
            $("#progressbar").progressbar( "value", percent * 100 );
        });

控制器的上传方法非常简单,因为它只是将工作传递给服务:

def upload() {

    params.selectedBatch = selectedBatch

    // Diag
    println "*** Request info: " + request
    println "*** Session info: " + request.getSession()
    println "*** Servlet context: " + request.getSession().getServletContext()

    def f = request.getFile('file')

    if (f.empty) {
        println "File cannot be empty!"
    }

    else {
            // The case that we have an Excel file upload. This if statement might need to be
            // a switch statement in the future when we start accepting other upload formats like
            // CSV and/or XML.
            if (params.fileTypegrp.toInteger() == 1) {

                // We know its an Excel file, now we use a switch for the data type.    
                switch (params.dataTypegrp.toInteger()) {
                    case 1:
                        fileImportService.excelAccountFileUpload(params)
                        println "upload complete!"
                        break
.
.
.

【问题讨论】:

  • 我知道这并不能真正回答您的问题,但您是否考虑过使用文件上传插件之一,例如uploadr
  • 我没有调查过。我确实看到了一些插件,但它们似乎有点旧,所以我不确定它们是否仍然适用,但我会调查一下。谢谢。
  • 您也可以在这里粘贴您的控制器代码吗?我之前使用 GRAILS 完成了 jquery 进度条,但没有使用 g:uploadForm。
  • @LalitAgarwal 我添加了相关的控制器代码。任何建议高度赞赏。感谢您对我的问题感兴趣。
  • @AnonymousHuman 抱歉,我错过了您的编辑并添加了我的编辑方式。请看我的回答并尝试一下。

标签: jquery grails


【解决方案1】:

UploadController.groovy

import grails.web.JSONBuilder

def uploadFile = {        
    if (request instanceof MultipartHttpServletRequest) {
        for (filename in request.fileNames) {

            def uploadedMessage = StringUtils.EMPTY

            MultipartFile file = request.getFile(filename)

            JSONBuilder jSON = new JSONBuilder()
            JSON json = jSON.build {
                name = file.originalFilename
                size = file.size                    
            }

            results = json.toString()
       }
  }

  render results
}

上传.gsp

<input id="fileupload" type="file" name="files[]" multiple>

<div id="progress" class="progress">
            <div class="progress-bar"></div>
</div>

<script>
        jQuery('#fileupload').fileupload({
          url: 'uploadFile',
          dataType: 'json',
          progressall: function (e, data) {
            var progress = parseInt(data.loaded / data.total * 100, 10);
            jQuery('#progress .progress-bar').css(
                    'width',
                    progress + '%'
            );                
         }
        });

</script>

我还没有完全尝试过这段代码,但这应该可以工作,如果您遇到任何错误,请添加评论。我假设你已经添加了所有必要的 JS 和 CSS。

仅供参考:我正在使用:http://blueimp.github.io/jQuery-File-Upload/

【讨论】:

  • 我试图实现这个解决方案,但我就是不知道如何正确使用 Javascript。经过一周的奋斗,我已经放弃了进度条。
  • @AnonymousHuman 我明白,在进度条方面,很难把所有事情都做好。我在实施时也遇到了很多困难。不过,我会看看我是否可以在本周末为它写一篇博客文章,其中包含一个示例 grails 项目。
猜你喜欢
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
相关资源
最近更新 更多