jquery.simpleUpload.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. (function(scope, $){
  2. var simpleUpload = [],
  3. simpleUploadCount = 0;
  4. $.fn.simpleUpload = function(options){
  5. var def = {
  6. url : null,
  7. change : null,
  8. error : null,
  9. types : null,
  10. fields : null,
  11. size : 5120
  12. };
  13. return this.each(function(){
  14. var $this = $(this),
  15. id = ++simpleUploadCount;
  16. $this.data('simpleUpload', id);
  17. options = options || {};
  18. $.each( $this.data(), function(name, value){
  19. if('simpleUpload' == name) return;
  20. options[name] = (typeof window[value] == 'function')? window[value] : value;
  21. });
  22. var params = $.extend({}, def, options);
  23. if(typeof params.change == 'function') $this.change(function(){
  24. params.change($this[0].files);
  25. });
  26. if(params.trigger){
  27. if(params.trigger instanceof jQuery){
  28. params.trigger.click(send);
  29. }else{
  30. $(document).on('click', params.trigger, send);
  31. }
  32. }else{
  33. $this.change(send);
  34. }
  35. simpleUpload[id] = params;
  36. function send(event){
  37. event.preventDefault();
  38. $this.simpleUploadSend();
  39. }
  40. });
  41. };
  42. $.fn.simpleUploadSend = function(fields){
  43. return this.each(function(){
  44. var $this = $(this),
  45. id = $this.data('simpleUpload'),
  46. name = $this.attr('name'),
  47. data = new FormData();
  48. params = simpleUpload[id];
  49. for(var i in $this[0].files){
  50. if(typeof $this[0].files[i] == 'object'){
  51. var file = $this[0].files[i];
  52. if(!$.typeCheck(file.name, params.types)){
  53. if(typeof params.error == 'function') params.error({ type: 'fileType' });
  54. return false;
  55. }
  56. if((file.size/params.size) > params.size){
  57. if(typeof params.error == 'function') params.error({ type:'size' });
  58. return false;
  59. }
  60. if(i == 0){
  61. data.append(name, file);
  62. }else {
  63. data.append(name+''+parseInt(i), file);
  64. }
  65. }
  66. }
  67. if(typeof params.fields == 'object'){
  68. for( i in params.fields){
  69. if($.isArray(params.fields[i])){
  70. for(var k in params.fields[i]) data.append(i+'['+k+']', params.fields[i][k]);
  71. }else{
  72. data.append(i, params.fields[i]);
  73. }
  74. }
  75. }
  76. var ajax = {
  77. url : params.url,
  78. data : data,
  79. cache : false,
  80. contentType : false,
  81. processData : false,
  82. type : 'POST',
  83. complete: function(){
  84. $this.val('');
  85. if(params.complete) params.complete(arguments);
  86. }
  87. };
  88. if(params.error != null ) ajax.error = params.error;
  89. if(params.success) ajax.success = params.success;
  90. if(params.async) ajax.async = params.async;
  91. if(params.beforeSend) ajax.beforeSend = params.beforeSend;
  92. if(params.global) ajax.global = params.global;
  93. if(params.dataType) ajax.dataType = params.dataType;
  94. if(params.contents) ajax.contents = params.contents;
  95. if(params.jsonp) ajax.jsonp = params.jsonp;
  96. if(params.jsonpCallback) ajax.jsonpCallback = params.jsonpCallback;
  97. if(params.password) ajax.password = params.password;
  98. if(params.username) ajax.username = params.username;
  99. if(params.statusCode) ajax.statusCode = params.statusCode;
  100. $.ajax(ajax);
  101. });
  102. };
  103. $.extend(true, {
  104. typeCheck: function(name, types){
  105. if($.isArray(types)){
  106. if(types.indexOf($.getExt(name)) > -1) return true;
  107. return false;
  108. }
  109. return true;
  110. },
  111. getExt: function(name){
  112. return name.substr(name.lastIndexOf(".") + 1);
  113. }
  114. });
  115. })(window, window.jQuery);