simpapp-phonegap-file-upload
Version:
jQuery based file upload
156 lines (151 loc) • 3.86 kB
JavaScript
var simp = {
//jQuery if not
$: (typeof window.jQuery !== 'undefined') ? window.jQuery : {},
//Global params
params: {
multiple: false,
progress: true,
inputName: [],
},
url: '',
files: [],
formData: new FormData(),
//
upload: function()
{
},
//Default callbacks
uploadCallback: function()
{
},
errorUploadCallback: function()
{
},
prepFormData: function()
{
if(simp.params.inputName.length === 0)
{
if(typeof $('input[type="file"]') === 'object')
{
simp.params.inputName = $('input[type="file"]');
}
}else
{
}
for(var i=0;i<simp.params.inputName.length;i++)
{
if(simp.params.multiple === true)
{
for(var j=0;j<simp.params.inputName[i].files.length;j++)
{
if(typeof simp.params.inputName[i].files === 'object')
{
$.extend(simp.params.inputName[i].files[j], {postFileName: simp.params.inputName[i].name});
simp.files.push(simp.params.inputName[i]);
}
}
}else
{
if(typeof simp.params.inputName[i].files === 'object')
{
$.extend(simp.params.inputName[i].files[0], {postFileName: simp.params.inputName[i].name});
simp.files.push(simp.params.inputName[i]);
}
}
}
if(simp.files.length !== 0)
{
for(var i=0;i<simp.files.length;i++)
{
if(simp.params.multiple === true)
{
for(var j=0;j<simp.files[i].files.length;j++)
{
simp.formData.append(simp.files[i].files[j].postFileName, simp.files[i].files[j], simp.files[i].files[j].name);
}
}else
{
simp.formData.append(simp.files[i].files[0].postFileName, simp.files[i].files[0], simp.files[i].files[0].name);
}
}
}
},
//Magic
doUpload: function(successCallback,errorCallback,onProgress)
{
successCallback = (typeof successCallback === 'function') ? successCallback : function(){};
errorCallback = (typeof errorCallback === 'function') ? errorCallback : function(){};
onProgress = (typeof onProgress === 'function') ? onProgress : function(){};
simp.prepFormData();
$.ajax({
type: "POST",
url: simp.url,
success: function(e)
{
simp.uploadCallback(e);
successCallback(e);
},
xhr: function () {
var myXhr = $.ajaxSettings.xhr();
if (myXhr.upload) {
myXhr.upload.addEventListener('progress', function(e){
if(e.lengthComputable)
{
console.log(e);
if(simp.params.progress===true)
{
var percentComplete = e.loaded / e.total;
percentComplete = parseInt(percentComplete * 100);
onProgress(percentComplete);
}
}
}, false);
}
return myXhr;
},
error: function (error) {
simp.errorUploadCallback();
errorCallback();
},
async: true,
data: simp.formData,
cache: false,
contentType: false,
processData: false,
});
},
//init
ready: function()
{
console.log('ready');
},
init: function(url, options)
{
//input = (typeof input === 'object' || typeof input === 'string') ? input : [];
url = (typeof url === 'string') ? url : '';
options = (typeof options === 'object') ? options : '';
if(options !== '') for(var i in simp.params) if(typeof options[i] !== 'undefined') this.params[i] = options[i];
this.url = url;
this.loadRes();
},
bindEvents: function()
{
},
//loading jQuery func
loadRes: function()
{
if(!window.jQuery)
{
var script = document.createElement("SCRIPT");
script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js';
script.type = 'text/javascript';
script.onload = function() {
simp.ready(window.jQuery);
};
document.getElementsByTagName("head")[0].appendChild(script);
}else
{
simp.ready(window.jQuery);
}
}
};