SpringMVC文件上传,通常进度条是由Javascript完成的?
初学者警惕 这似乎是一个很奇怪的问题。。。。但我一直在研究如何使用SpringMVC框架进行文件上传 我发现了很多使用apache公共io依赖项的示例。 当我进一步研究如何实现progressListener时。我发现这个 现在,我一直认为进度条百分比是由服务器计算的文件上传量。所以我认为我们需要在控制器中实现一个计算,它返回的字节数占传输字节数的百分比。。。或写入目录的字节数 但从第二个链接示例来看,Spring控制器似乎不执行任何计算,只是将文件写入目标 所以问题是 文件传输实际上是如何工作的……我只能从示例Spring控制器中假设,在写入服务器目录之前,它会一直等到收到完整的文件?这就是为什么要显示进度条,我们使用javascript来计算有多少文件已传输到服务器但未写入 需要一些了解javascript的帮助 从uploadNext方法调用onUploadProgress方法,但不传入任何参数SpringMVC文件上传,通常进度条是由Javascript完成的?,javascript,spring-mvc,Javascript,Spring Mvc,初学者警惕 这似乎是一个很奇怪的问题。。。。但我一直在研究如何使用SpringMVC框架进行文件上传 我发现了很多使用apache公共io依赖项的示例。 当我进一步研究如何实现progressListener时。我发现这个 现在,我一直认为进度条百分比是由服务器计算的文件上传量。所以我认为我们需要在控制器中实现一个计算,它返回的字节数占传输字节数的百分比。。。或写入目录的字节数 但从第二个链接示例来看,Spring控制器似乎不执行任何计算,只是将文件写入目标 所以问题是 文件传输实际上是如何工
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"));
}