1:js判断type为file的input标签内是否有上传文件
var fileInput = $('#file').get(0).files[0];
if(!fileInput){
layer.msg("未选择文件!",{
time: 2000, //2s后自动关闭
})
}
2:xhr上传文件方式
var fd;
try {
fd = new FormData();
} catch (ex) {
alert(ex + "Please upgrade your browser");
}
fd.append("ssid",$("#serverid").val());
fd.append("accountId",$("#ID").val());
/* var classInfoElement = document.getElementById("classInfo");
var info = classInfoElement.value;
if(info == null || info == ""){
alert("请输入用于描述的重载信息!");
return;
}
fd.append("classDescribe",info); */
var list = document.getElementById("context").getElementsByTagName("input");
for (var i = 0; i < list.length && list[i]; i++) {
//判断是否为文本框
if (list[i].type === "file") {
fd.append("file", list[i].files[0]);
if (list[i].files[0].name.lastIndexOf(".txt") === -1) {
alert("IIIegal file type:" + list[i].files[0].name);
return;
}
}
}
try {
var xhr;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xhr = new XMLHttpRequest();
} else {// code for IE6, IE5
try {
xhr = ActiveXObject("MSXML2.XMLHTTP.3.0");
} catch (ex) {
alert(ex);
}
}
if (xhr == null) {
alert("AJAX (XMLHTTP) not supported.");
}
if($("#num").val()<4){
document.getElementById("showprocessMe").style.display = "block";
}
//上传中设置上传的百分比
xhr.upload
.addEventListener(
"progress",
function(evt) {
if (evt.lengthComputable) {
var percentComplete = Math.round(evt.loaded
* 100 / evt.total);
document.getElementById("showprocessMe").innerHTML = 'plan:'
+ percentComplete
+ "%"
+ " byte:"
+ evt.loaded
+ "B/"
+ evt.total
+ "B";
} else {
document.getElementById("showprocessMe").innerHTML = 'can not calculate ';
}
}, false);
//请求完成后执行的操作
xhr.addEventListener("load", function(evt) {
if($("#num").val()>=4){
layer.msg("导入失败!账户角色栏位已满,请清理后重试",{
time: 2000, //2s后自动关闭
});
}else{
layer.msg("导入成功!",{
time: 2000, //2s后自动关闭
});
}
/*window.location.href = "uploadingAndbind.do";*/
}, false);
//请求error
xhr.addEventListener("error", uploadFailed, false);
//请求中断
xhr.addEventListener("abort", uploadCanceled, false);
//发送请求
xhr.open("POST", "uploadRoleData.do");
//xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(fd);
} catch (e) {
layer.msg('导入失败'+e.message,{
time: 2000, //2s后自动关闭
});
}
3:struts的方式 获得输入流,唤醒浏览器下载文件
<action name="downLoadData"
class="bomber.action.RoleManagerAction" method="downLoadData">
<result name="txt" type="stream">
<param name="contentType">
application/text/plain
</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">
attachment;filename="${fileName}"
</param>
<param name="bufferSize">1024</param>
</result>
</action>
配置文件详解:
1、type 为 stream 应用 StreamResult 处理
2、contentType
内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片
3、inputName
下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,例如取值为inputStream的属性需要编写getInputStream()方法
4、contentDisposition
文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。取值为:
attachment;filename=”struts2.txt”,表示文件下载的时候保存的名字应为struts2.txt。如果直接写filename=”struts2.txt”,那么默认情况是代表inline,浏览器会尝试自动打开它,等价于这样的写法:inline;filename=”struts2.txt”
5、bufferSize
下载缓冲区的大小