<!doctype html>
<html>
<head>
<title>import project</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<style>
body {
text-align: center;
background-color: #DEF3FE;
font-family: Arial, Helvetica, sans-serif;
font-size: 80%;
color: #666;
margin: 0;
padding: 0;
}
.File_Upload_Form {
width: 600px;
margin: 30px auto;
background-color: #FFF;
border-radius: 4px;
padding: 4px 20px 20px 20px;
}
.span {
width: 200px;
}
h1 {
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 170%;
color: #645348;
font-style: italic;
text-decoration: none;
font-weight: 100;
}
input[type="submit"] {
border: 1px solid #917568;
border-radius: 4px;
margin: 0;
padding: 4px 10px 4px 10px;
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 14px;
font-style: italic;
color: #333333;
text-shadow: 1px 1px 0 #fff;
background-color: #A5B276;
background-image: -webkit-linear-gradient(#CED8AF, #A5B276);
background-image: -moz-linear-gradient(center bottom, #A5B276 0%, #727E47 100%);
background-size: 1px 50px;
padding: 5px;
cursor: pointer;
-webkit-transition: background .5s ease-out;
}
input[type="submit"]:Hover, :focus {
background-position: 100px;
}
.resultDiv{
min-height:300px;
/*border:1px solid #ccc;*/
}
.tb_tip td{
vertical-align: top;
text-align: left;
padding-left:10px;
width:50%;
}
.tb_tip {
width:100%;
}
.resultTip {
color:red;
float: left;
margin: 10px;
}
ul{
list-style: none;
}
ul li{
width: 230px;
height: 31px;
line-height: 28px;
text-align: left;
position: relative;
}
ul li input{
right:12px;
position:absolute;
width:150px;
}
ul li select{
right:12px;
position:absolute;
width:152px;
}
.bytes_total{
float: right;
margin-right: 20px;
}
.lineborder{
border-bottom:1px dashed #ccc;
}
.lineborder:odd {
}
.div_File span{
padding-left:10px;
}
.div_File:even{
background-color:pink;
}
</style>
</head>
<body>
<div class="File_Upload_Form">
<h1>Import project to Cloud</h1>
<input type="hidden" value="${userName}" id="userName" name="userName"/>
<form enctype="multipart/form-data" id="importForm" action="javascript: doImport();">
<ul >
<li>
<span>项目标识:</span><input type="text" name="projectName" id="projectName" list="searchlist" required value="testClear"></input>
<datalist id="searchlist">
#foreach($!item in $!myProjectList)
<option value="$!item.project.identifying" label="$!item.project.name" />
#end
</datalist>
</li>
<li>
节点类型:
<select id="cbDomain" name="cbDomain">
<option value="hivesql">HIVE SQL</option>
<option value="shell">SHELL</option>
<option value="odpsSql" default="true">ODPS SQL</option>
<option value="cfg" default="true">CFG</option>
</select>
</li>
</ul>
<div style="width:415px;">
<input type="file" οnchange="showSelectFiles()" name="import_file" multiple webkitdirectory="" directory="" mozdirectory>
<input type="submit" value="Upload File"/>
</div>
</form>
<div class="resultTip" style='display:none'></div>
<table class="tb_tip">
<tr>
<td colspan="2" style="padding-bottom: 13px;">
<div id="progress" class="resultDiv" style="width:100%;line-height: 1.5;"/>
</td>
</tr>
<tr style="display:none">
<td style="">
成功文件:
<div id="succssedFile" class="resultDiv">
</div>
</td>
<td>
失败文件:
<div id="failedFile" class="resultDiv">
</div>
</td>
</tr>
</table>
</div>
<script>
resultInfo={
successedfiles:[],
successedIds:[],
failedfiles:[]
}
fileActionType={
viewFile:1,
uploadFile:2
}
function errorHandler(e) {
var msg = '';
switch (e.code) {
case FileError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case FileError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case FileError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case FileError.INVALID_MODIFICATION_ERR:
msg = 'INVALID_MODIFICATION_ERR';
break;
case FileError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
};
console.log(msg);
}
function showSelectFiles(){
doImport(fileActionType.viewFile);
}
function doImport(type) {
if(type==fileActionType.viewFile){
jQuery("#progress").empty();
}
var v_file_list = $("#importForm :file ").attr("files");
if (v_file_list.length == 0 ) {
alert("Please choose a file.");
return 0;
}
function processFile(index){
file = v_file_list[index];
if (!file) return;
var file_path = file.webkitRelativePath;
if( file_path[file_path.length - 1]=='.') {
processFile(index + 1);
return;
}
var reader = new FileReader();
reader.onloadstart = function () {
console.info(type==fileActionType.viewFile+"-------------");
if(type==fileActionType.viewFile){
console.log(file_path + " onloadstart");
var fileDiv= $('<div class="div_File"></div)').attr("id", "file_" + index);
fileDiv.appendTo("#progress");
var infoStr=[];
infoStr.push('<span class="file_path" title="'+file_path+'">'+substr_(file_path,35,"...")+'</span>');
// infoStr.push('<span class="bytes_read">'+" read:" + 0+'</span>');
infoStr.push('<span class="bytes_total">'+"fileSize: "+ file.size + " "+'</span> <br/>');
fileDiv.append(infoStr.join(""));
}
}
reader.onprogress = function (p) {
console.log(file_path + " onprogress");
$("#"+"file"+ index + " #bytes_read").text(" read:" + p.size)
}
reader.onload = function () {
console.log(file_path + " load complete");
}
reader.onloadend = function () {
if(type!=fileActionType.viewFile){
// 文件路径
console.log(file_path + " onloadend");
// 文件名字从路径中截取
// TODO
// 文件类型让用户选择
if (reader.error) {
errorHandler(reader.error);
console.log(reader.error);
resultInfo.failedfiles.push(file_path);
if(index==(v_file_list.length-1)){
showResultInfo();
}
} else {
jQuery("#"+"file"+ index + " #bytes_read").text(" read:" + file.size);
console.log("result is----:" + this.result);
importFile(file,reader,index==(v_file_list.length-1),index);
}
}
if(index==(v_file_list.length-1)){
$(".div_File:even").css("background", "#E3E3E3");
}
processFile(index + 1);
}
reader.readAsText(file, "UTF-8");
}
processFile(0)
}
function importFile(file,reader,isLast,index){
var filePath=file.webkitRelativePath;
var index_=filePath.lastIndexOf("/");
var fileName=filePath.substring(index_+1);
var path=filePath.substring(0,index_+1);
var url="json/jsonReq.do"
console.log("do post");
url+="?actionName=addFile";
url+="&username="+jQuery("#userName").val();
url+="&identifying="+jQuery("#projectName").val();
var data_={
fileContent:reader.result,
path:path,
fileName:fileName,
comment:'testcomment..',
type:jQuery("#cbDomain").val()
}
jQuery.ajax({
type: "POST",
data:{ data:JSON.stringify(eval(data_)) },
url: url,
success: function(resData){
var lineBorder;
if(isLast){
lineBorder="";
}else{
lineBorder="<div class='lineborder'/>";
}
var resObj = eval("(" + resData + ")");
if(resObj.retCode==0){
resultInfo.successedfiles.push(filePath);
resultInfo.successedIds.push(resObj.jobId);
jQuery("#file_"+index).append("<span style='color:blue'>成功 taskId: "+resObj.jobId+"</span>"+lineBorder);
}else{
jQuery(".resultTip").append(resObj.errMsg+'</br>');
resultInfo.failedfiles.push(file.webkitRelativePath);
jQuery("#file_"+index).append("<span style='color:red'>失败: "+resObj.errMsg+"</span>"+lineBorder);
}
if(isLast){
setTimeout(function(){showResultInfo();},500)
}
},
error: function(msg){
resultInfo.failedfiles.push(file.webkitRelativePath);
jQuery("#file_"+index).css("color","red");
if(isLast){
setTimeout(function(){showResultInfo();},500)
}
}
});
}
//显示上传结果
function showResultInfo(){
jQuery("#succssedFile").empty();
jQuery("#failedFile").empty();
for(var i=0; i<resultInfo.successedfiles.length;i++){
jQuery("#succssedFile").append(resultInfo.successedfiles[i]+"</br>")
}
for(var i=0; i<resultInfo.failedfiles.length;i++){
jQuery("#failedFile").append(resultInfo.failedfiles[i]+"</br>")
}
doPublish();
}
//调用 publish 服务
function doPublish(){
var taskIds = resultInfo.successedIds.join(",");
var url="yy.do";
url+="?actionName=doPublish";
jQuery.ajax({
type: "POST",
data:{ "taskIds": taskIds },
url: url,
success: function(resData){
var resObj = eval("(" + resData + ")");
if(resObj.retCode==0){
//jQuery(".resultTip").append('scheduler 已接受处理').css("color","#ccc");
}else{
jQuery(".resultTip").append('调用 doPublish 服务失败');
}
},
error: function(msg){
jQuery(".resultTip").append('doPublish 失败,请检查 '+msg);
}
});
}
String.prototype.substr_=function(length,fix){
return this.length>length?this.substring(0,length)+fix:this;
}
function substr_(objStr,length,fix){
if(objStr){
return objStr.substr_(length,fix)
}
return "";
}
</script>
</body>
</html>