Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringMVC文件上传,通常进度条是由Javascript完成的?_Javascript_Spring Mvc - Fatal编程技术网

SpringMVC文件上传,通常进度条是由Javascript完成的?

SpringMVC文件上传,通常进度条是由Javascript完成的?,javascript,spring-mvc,Javascript,Spring Mvc,初学者警惕 这似乎是一个很奇怪的问题。。。。但我一直在研究如何使用SpringMVC框架进行文件上传 我发现了很多使用apache公共io依赖项的示例。 当我进一步研究如何实现progressListener时。我发现这个 现在,我一直认为进度条百分比是由服务器计算的文件上传量。所以我认为我们需要在控制器中实现一个计算,它返回的字节数占传输字节数的百分比。。。或写入目录的字节数 但从第二个链接示例来看,Spring控制器似乎不执行任何计算,只是将文件写入目标 所以问题是 文件传输实际上是如何工

初学者警惕

这似乎是一个很奇怪的问题。。。。但我一直在研究如何使用SpringMVC框架进行文件上传

我发现了很多使用apache公共io依赖项的示例。

当我进一步研究如何实现progressListener时。我发现这个

现在,我一直认为进度条百分比是由服务器计算的文件上传量。所以我认为我们需要在控制器中实现一个计算,它返回的字节数占传输字节数的百分比。。。或写入目录的字节数

但从第二个链接示例来看,Spring控制器似乎不执行任何计算,只是将文件写入目标

所以问题是

文件传输实际上是如何工作的……我只能从示例Spring控制器中假设,在写入服务器目录之前,它会一直等到收到完整的文件?这就是为什么要显示进度条,我们使用javascript来计算有多少文件已传输到服务器但未写入

需要一些了解javascript的帮助

从uploadNext方法调用onUploadProgress方法,但不传入任何参数

xhr.upload.addEventListener("progress", onUploadProgress, false);
但若你们看一下onUploadProgress方法,它需要一个参数e,这是什么

function onUploadProgress(e) {
    if (e.lengthComputable) {
        var percentComplete = parseInt((e.loaded + totalUploaded) * 100 / totalFileLength);
        var bar = document.getElementById('bar');
        bar.style.width = percentComplete + '%';
        bar.innerHTML = percentComplete + ' % complete';
    } else {
        debug('unable to compute');
    }
}

非常感谢您在定义enctype:multipart/form data in form,然后服务器端的MutlipartResolver解析multipart请求时帮助我

<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <property name="defaultEncoding"><value>utf-8</value></property>
</bean>
在控制器上:

function uploadFile(thisVar,fileName){ 

        var msg='',params="fileName="+fileName;

        var fileContent = new FormData();
        fileContent.append(fileName,thisVar.files[0]);

        $.ajax({
            type: "POST",
            enctype:"multipart/form-data",
            url: "addCoupons?"+params,
            data: fileContent,
            processData: false,
            contentType: false,
            beforeSend: function() { 
                $(thisVar).parent().toggleClass('fa-upload fa-refresh fa-spin');//.click('false');
            },
            complete:function(){ 
                $(thisVar).parent().toggleClass('fa-upload fa-refresh fa-spin');//.click('true');
            }
        }).done(function(responseText) { 
            //alert('on success '+responseText);

        }).fail(function(){ 
          alert("Error");
       });
    }
 @RequestMapping(value="/addCoupons")
 public  @ResponseBody String insertData(MultipartHttpServletRequest request) //@RequestParam("file") MultipartFile file
       {

                CommonsMultipartFile file = (CommonsMultipartFile) 
                      request.getFile(request.getParameter("fileName"));
        }