前端上传控件使用心得
最近有项目使用https,原使用的上传控件uploadify好好的功能不能用了,分析主要原因是swf上传在ssl认证上有点问题。在本机模拟了ssl证书,经测试发现只有IE不行,IE上传到服务器的文件大小都是0,而firefox、chrome都可以正常使用。
为解决https下文件上传问题,改用了jquery-file-upload控件。功能用的比较简单,每上传一个文件,在下面列表上新增一行数据,每一行数据可以有按钮点击上传,能显示上传进度,支持回调
<div>
<div>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="files[]" multiple>
</div>
<!-- The container for the uploaded files -->
<table id="files" class="files" style="width:100%"></table>
</div>$('#fileupload').fileupload({
url:'/uploadify/UploadServlet',
dataType: 'json',
progress: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
data.context.text('Uploading '+progress + '%');
},
add: function (e, data) {
var $tr = $("<tr/>");
$("<td/>").css("width","60%").text(data.files[0].name).appendTo($tr);
$("<td/>").css("width","40%").append($('<button/>').text('Upload').click(function () {
data.context = $('<p/>').text('Uploading').replaceAll($(this));
data.submit();
})).appendTo($tr);
data.context = $tr.appendTo($('#files'));
},
done: function (e, data) {
//data.result即后台返回的json数组
data.context.text('Finished');
alert(data.files[0].name+":dosomething!");
}
});效果如下图

这里碰到两个问题,1)IE8上传的文件file.getName()获取到的文件名带有全路径,这一点可以在代码层判断处理一下;2) IE10以下不支持返回json数据,如果设置response.setContentType("application/json") 会导致response写的json数据在IE下显示下载json文件,而直接设置成response.setContentType("text/html;charset=UTF-8")就可以了。