在这里,我们将给大家分享关于AjaxUpLoad.js怎么实现文件上传的知识,让您更了解ajaxuploadfile的本质,同时也会涉及到如何更有效地AjaxUpload多文件上传插件介绍(githu
在这里,我们将给大家分享关于AjaxUpLoad.js怎么实现文件上传的知识,让您更了解ajaxuploadfile的本质,同时也会涉及到如何更有效地Ajax Upload多文件上传插件介绍 ( github上Api ) -- AjaxUpload上传超时提示.、ajaxfileupload.js+SpringMVC实现文件上传、ajaxfileupload.js实现文件上传(附步骤代码)、ajaxfileupload.js实现文件异步上传的内容。
本文目录一览:- AjaxUpLoad.js怎么实现文件上传(ajaxuploadfile)
- Ajax Upload多文件上传插件介绍 ( github上Api ) -- AjaxUpload上传超时提示.
- ajaxfileupload.js+SpringMVC实现文件上传
- ajaxfileupload.js实现文件上传(附步骤代码)
- ajaxfileupload.js实现文件异步上传
AjaxUpLoad.js怎么实现文件上传(ajaxuploadfile)
这次给大家带来AjaxUpLoad.js怎么实现文件上传,AjaxUpLoad.js实现文件上传的注意事项有哪些,下面就是实战案例,一起来看一下。AjaxUpLoad.js的使用实现无刷新文件上传,如图。
图1 文件上传前
图2 文件上传后
1、创建页面并编写HTML
上传文档:
<p class=uploadFile> <span id=doc><input type=text disabled=disabled /></span> <input type=hidden id=hidFileName /> <input type=button id=btnUploadFile value=上传 /> <input type=button id=btnDeleteFile value=删除 /> </p>
上传图片:
<p class=uploadImg> <img id=imgShow src=/images/nophoto.gif /> <input type=hidden id=hidImgName /> <input type=button id=btnUploadImg value=上传 /> <input type=button id=btnDeleteImg value=删除 /> </p>
2、引用AjaxUpload.js文件
<script src=/js/common/AjaxUpload.js type=text/javascript></script>
3、编写JS脚本
window.onload = function() { init(); //初始化 } //初始化 function init() { //初始化文档上传 var btnFile = document.getElementById(btnUploadFile); var doc = document.getElementById(doc); var hidFileName = document.getElementById(hidFileName); document.getElementById(btnDeleteFile).onclick = function() { DelFile(doc, hidFileName); }; g_AjxUploadFile(btnFile, doc, hidFileName); //初始化图片上传 var btnImg = document.getElementById(btnUploadImg); var img = document.getElementById(imgShow); var hidImgName = document.getElementById(hidImgName); document.getElementById(btnDeleteImg).onclick = function() { DelImg(img, hidImgName); }; g_AjxUploadImg(btnImg, img, hidImgName); } var g_AjxTempDir = /file/temp/; //文档上传 function g_AjxUploadFile(btn, doc, hidPut, action) { var button = btn, interval; new AjaxUpload(button, { action: ((action == null || action == undefined) ? '/Common/UploadHandler.ashx?fileType=file' : action), data: {}, name: 'myfile', onSubmit: function(file, ext) { if (!(ext && /^(rar|zip|pdf|pdfx|txt|csv|xls|xlsx|doc|docx|RAR|ZIP|PDF|PDFX|TXT|CSV|XLS|XLSX|DOC|DOCX)$/.test(ext))) { alert(您上传的文档格式不对,请重新选择!); return false; } }, onComplete: function(file, response) { flagValue = response; if (flagValue == 1) { alert(您上传的文档格式不对,请重新选择!); } else if (flagValue == 2) { alert(您上传的文档大于2M,请重新选择!); } else if (flagValue == 3) { alert(文档上传失败!); } else { hidPut.value = response; doc.innerHTML=<a href=' + g_AjxTempDir + response + ' target='_blank'> + response + </a>; } } }); } //图片上传 function g_AjxUploadImg(btn, img, hidPut) { var button = btn, interval; new AjaxUpload(button, { action: '/Common/UploadHandler.ashx?fileType=img', data: {}, name: 'myfile', onSubmit: function(file, ext) { if (!(ext && /^(jpg|JPG|png|PNG|gif|GIF)$/.test(ext))) { alert(您上传的图片格式不对,请重新选择!); return false; } }, onComplete: function(file, response) { flagValue = response; if (flagValue == 1) { alert(您上传的图片格式不对,请重新选择!); } else if (flagValue == 2) { alert(您上传的图片大于200K,请重新选择!); } else if (flagValue == 3) { alert(图片上传失败!); } else { hidPut.value = response; img.src = g_AjxTempDir + response; } } }); } //删除文档 function DelFile(doc, hidPut) { hidPut.value = ; doc.innerHTML = <input type=\text\ disabled=\disabled\ />; } //删除图片 function DelImg(img, hidPut) { hidPut.value = ; img.src = /images/nophoto.gif; }
4、创建/Common/UploadHandler.ashx处理程序
<%@ WebHandler Language=C# Class=UploadHandler %> using System; using System.Web; using System.Text.RegularExpressions; using System.IO; public class UploadHandler : IHttpHandler { private string _filedir = ; //文件目录 /// <summary> /// 处理上传文件(1:文件格式不正确、2:文件大小不正确、3:上传失败、文件名称:上传成功) /// </summary> /// <param name=context></param> public void ProcessRequest (HttpContext context) { _filedir = context.Server.MapPath(@/file/temp/); try { string result = 3; string fileType = context.Request.QueryString[fileType]; //获取上传文件类型 if (fileType == file) { result = UploadFile(context); //文档上传 } else if (fileType == img) { result = UploadImg(context); //图片上传 } context.Response.Write(result); } catch { context.Response.Write(3);//3文件上传失败 } } /// <summary> /// 文档上传 /// </summary> /// <param name=context></param> /// <returns></returns> private string UploadFile(HttpContext context) { int cout = context.Request.Files.Count; if (cout > 0) { HttpPostedFile hpf = context.Request.Files[0]; if (hpf != null) { string fileExt = Path.GetExtension(hpf.FileName).ToLower(); //只能上传文件,过滤不可上传的文件类型 string fileFilt = .rar|.zip|.pdf|.pdfx|.txt|.csv|.xls|.xlsx|.doc|.docx......; if (fileFilt.IndexOf(fileExt) <= -1) { return 1; } //判断文件大小 int length = hpf.ContentLength; if (length > 2097152) { return 2; } Random rd = new Random(); DateTime NowTime = DateTime.Now; string newFileName = NowTime.Year.ToString() + NowTime.Month.ToString() + NowTime.Day.ToString() + NowTime.Hour.ToString() + NowTime.Minute.ToString() + NowTime.Second.ToString() + rd.Next(1000, 1000000) + Path.GetExtension(hpf.FileName); if (!Directory.Exists(_filedir)) { Directory.CreateDirectory(_filedir); } string fileName = _filedir + newFileName; hpf.SaveAs(fileName); return newFileName; } } return 3; } /// <summary> /// 图片上传 /// </summary> /// <param name=context></param> /// <returns></returns> private string UploadImg(HttpContext context) { int cout = context.Request.Files.Count; if (cout > 0) { HttpPostedFile hpf = context.Request.Files[0]; if (hpf != null) { string fileExt = Path.GetExtension(hpf.FileName).ToLower(); //只能上传文件,过滤不可上传的文件类型 string fileFilt = .gif|.jpg|.PHP|.jsp|.jpeg|.png|......; if (fileFilt.IndexOf(fileExt) <= -1) { return 1; } //判断文件大小 int length = hpf.ContentLength; if (length > 204800) { return 2; } Random rd = new Random(); DateTime NowTime = DateTime.Now; string newFileName = NowTime.Year.ToString() + NowTime.Month.ToString() + NowTime.Day.ToString() + NowTime.Hour.ToString() + NowTime.Minute.ToString() + NowTime.Second.ToString() + rd.Next(1000, 1000000) + Path.GetExtension(hpf.FileName); if (!Directory.Exists(_filedir)) { Directory.CreateDirectory(_filedir); } string fileName = _filedir + newFileName; hpf.SaveAs(fileName); return newFileName; } } return 3; } #region IHttpHandler 成员 public bool IsReusable { get { throw new NotImplementedException(); } } #endregion }
附件1:页面CSS样式
/*上传文件*/ .uploadFile{margin-bottom:10px;} /*上传图片*/ .uploadImg{} .uploadImg img{width:102px; height:64px; border:1px solid #CCCCCC; display: block;}
附件2:AjaxUpload.js文件
/** * AJAX Upload ( http://valums.com/ajax-upload/ ) * copyright (c) Andris Valums * Licensed under the MIT license ( http://valums.com/mit-license/ ) * Thanks to Gary Haran, David Mark, Corey Burns and others for contributions */ (function () { /* global window */ /* jslint browser: true, devel: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true */ /** * Wrapper for FireBug's console.log */ function log() { if (typeof(console) != 'undefined' && typeof(console.log) == 'function') { Array.prototype.unshift.call(arguments, '[Ajax Upload]'); console.log(Array.prototype.join.call(arguments, ' ')); } } /** * Attaches event to a dom element. * @param {Element} el * @param type event name * @param fn callback This refers to the passed element */ function addEvent(el, type, fn) { if (el.addEventListener) { el.addEventListener(type, fn, false); } else if (el.attachEvent) { el.attachEvent('on' + type, function () { fn.call(el); }); } else { throw new Error('not supported or DOM not loaded'); } } /** * Attaches resize event to a window, limiting * number of event fired. Fires only when encounteres * delay of 100 after series of events. * * Some browsers fire event multiple times when resizing * http://www.quirksmode.org/dom/events/resize.html * * @param fn callback This refers to the passed element */ function addResizeEvent(fn) { var timeout; addEvent(window, 'resize', function () { if (timeout) { clearTimeout(timeout); } timeout = setTimeout(fn, 100); }); } // Needs more testing, will be rewriten for next version // getoffset function copied from jQuery lib (http://jquery.com/) if (document.documentElement.getBoundingClientRect) { // Get Offset using getBoundingClientRect // http://ejohn.org/blog/getboundingclientrect-is-awesome/ var getoffset = function (el) { var Box = el.getBoundingClientRect(); var doc = el.ownerDocument; var body = doc.body; var docElem = doc.documentElement; // for ie var clientTop = docElem.clientTop || body.clientTop || 0; var clientLeft = docElem.clientLeft || body.clientLeft || 0; // In Internet Explorer 7 getBoundingClientRect property is treated as physical, // while others are logical. Make all logical, like in IE8. var zoom = 1; if (body.getBoundingClientRect) { var bound = body.getBoundingClientRect(); zoom = (bound.right - bound.left) / body.clientWidth; } if (zoom > 1) { clientTop = 0; clientLeft = 0; } var top = Box.top / zoom + (window.pageYOffset || docElem && docElem.scrollTop / zoom || body.scrollTop / zoom) - clientTop, left = Box.left / zoom + (window.pageXOffset || docElem && docElem.scrollLeft / zoom || body.scrollLeft / zoom) - clientLeft; return { top: top, left: left }; }; } else { // Get offset adding all offsets var getoffset = function (el) { var top = 0, left = 0; do { top += el.offsetTop || 0; left += el.offsetLeft || 0; el = el.offsetParent; } while (el); return { left: left, top: top }; }; } /** * Returns left, top, right and bottom properties describing the border-Box, * in pixels, with the top-left relative to the body * @param {Element} el * @return {Object} Contains left, top, right,bottom */ function getBox(el) { var left, right, top, bottom; var offset = getoffset(el); left = offset.left; top = offset.top; right = left + el.offsetWidth; bottom = top + el.offsetHeight; return { left: left, right: right, top: top, bottom: bottom }; } /** * Helper that takes object literal * and add all properties to element.style * @param {Element} el * @param {Object} styles */ function addStyles(el, styles) { for (var name in styles) { if (styles.hasOwnProperty(name)) { el.style[name] = styles[name]; } } } /** * Function places an absolutely positioned * element on top of the specified element * copying position and dimentions. * @param {Element} from * @param {Element} to */ function copyLayout(from, to) { var Box = getBox(from); addStyles(to, { position: 'absolute', left: Box.left + 'px', top: Box.top + 'px', width: from.offsetWidth + 'px', height: from.offsetHeight + 'px' }); } /** * Creates and returns element from html chunk * Uses innerHTML to create an element */ var toElement = (function () { var p = document.createElement('p'); return function (html) { p.innerHTML = html; var el = p.firstChild; return p.removeChild(el); }; })(); /** * Function generates unique id * @return unique id */ var getUID = (function () { var id = 0; return function () { return 'ValumsAjaxUpload' + id++; }; })(); /** * Get file name from path * @param {String} file path to file * @return filename */ function fileFromPath(file) { return file.replace(/.*(\/|\\)/, ); } /** * Get file extension lowercase * @param {String} file name * @return file extenstion */ function getExt(file) { return (-1 !== file.indexOf('.')) ? file.replace(/.*[.]/, '') : ''; } function hasClass(el, name) { var re = new RegExp('\\b' + name + '\\b'); return re.test(el.className); } function addClass(el, name) { if (!hasClass(el, name)) { el.className += ' ' + name; } } function removeClass(el, name) { var re = new RegExp('\\b' + name + '\\b'); el.className = el.className.replace(re, ''); } function removeNode(el) { el.parentNode.removeChild(el); } /** * Easy styling and uploading * @constructor * @param button An element you want convert to * upload button. Tested dimentions up to 500x500px * @param {Object} options See defaults below. */ window.AjaxUpload = function (button, options) { this._settings = { // Location of the server-side upload script action: 'upload.PHP', // File upload name name: 'userfile', // Additional data to send data: {}, // Submit file as soon as it's selected autoSubmit: true, // The type of data that you're expecting back from the server. // html and xml are detected automatically. // Only useful when you are using json data as a response. // Set to json in that case. responseType: false, // Class applied to button when mouse is hovered hoverClass: 'hover', // Class applied to button when AU is disabled disabledClass: 'disabled', // When user selects a file, useful with autoSubmit disabled // You can return false to cancel upload onChange: function (file, extension) {}, // Callback to fire before file is uploaded // You can return false to cancel upload onSubmit: function (file, extension) {}, // Fired when file upload is completed // WARNING! DO NOT USE FALSE STRING AS A RESPONSE! onComplete: function (file, response) {} }; // Merge the users options with our defaults for (var i in options) { if (options.hasOwnProperty(i)) { this._settings[i] = options[i]; } } // button isn't necessary a dom element if (button.jquery) { // jQuery object was passed button = button[0]; } else if (typeof button == string) { if (/^#.*/.test(button)) { // If jQuery user passes #elementId don't break it button = button.slice(1); } button = document.getElementById(button); } if (!button || button.nodeType !== 1) { throw new Error(Please make sure that you're passing a valid element); } if (button.nodeName.toupperCase() == 'A') { // disable link addEvent(button, 'click', function (e) { if (e && e.preventDefault) { e.preventDefault(); } else if (window.event) { window.event.returnValue = false; } }); } // DOM element this._button = button; // DOM element this._input = null; // If disabled clicking on button won't do anything this._disabled = false; // if the button was disabled before refresh if will remain // disabled in FireFox, let's fix it this.enable(); this._rerouteClicks(); }; // assigning methods to our class AjaxUpload.prototype = { setData: function (data) { this._settings.data = data; }, disable: function () { addClass(this._button, this._settings.disabledClass); this._disabled = true; var nodeName = this._button.nodeName.toupperCase(); if (nodeName == 'INPUT' || nodeName == 'BUTTON') { this._button.setAttribute('disabled', 'disabled'); } // hide input if (this._input) { // We use visibility instead of display to fix problem with Safari 4 // The problem is that the value of input doesn't change if it // has display none when user selects a file this._input.parentNode.style.visibility = 'hidden'; } }, enable: function () { removeClass(this._button, this._settings.disabledClass); this._button.removeAttribute('disabled'); this._disabled = false; }, /** * Creates invisible file input * that will hover above the button * <p><input type='file' /></p> */ _createInput: function () { var self = this; var input = document.createElement(input); input.setAttribute('type', 'file'); input.setAttribute('name', this._settings.name); addStyles(input, { 'position': 'absolute', // in Opera only 'browse' button // is clickable and it is located at // the right side of the input 'right': 0, 'margin': 0, 'padding': 0, 'fontSize': '480px', 'cursor': 'pointer' }); var p = document.createElement(p); addStyles(p, { 'display': 'block', 'position': 'absolute', 'overflow': 'hidden', 'margin': 0, 'padding': 0, 'opacity': 0, // Make sure browse button is in the right side // in Internet Explorer 'direction': 'ltr', //Max zIndex supported by Opera 9.0-9.2 'zIndex': 2147483583 }); // Make sure that element opacity exists. // Otherwise use IE filter if (p.style.opacity !== 0) { if (typeof(p.filters) == 'undefined') { throw new Error('Opacity not supported by the browser'); } p.style.filter = alpha(opacity=0); } addEvent(input, 'change', function () { if (!input || input.value === '') { return; } // Get filename from input, required // as some browsers have path instead of it var file = fileFromPath(input.value); if (false === self._settings.onChange.call(self, file, getExt(file))) { self._clearinput(); return; } // Submit form when value is changed if (self._settings.autoSubmit) { self.submit(); } }); addEvent(input, 'mouSEOver', function () { addClass(self._button, self._settings.hoverClass); }); addEvent(input, 'mouSEOut', function () { removeClass(self._button, self._settings.hoverClass); // We use visibility instead of display to fix problem with Safari 4 // The problem is that the value of input doesn't change if it // has display none when user selects a file input.parentNode.style.visibility = 'hidden'; }); p.appendChild(input); document.body.appendChild(p); this._input = input; }, _clearInput: function () { if (!this._input) { return; } // this._input.value = ''; Doesn't work in IE6 removeNode(this._input.parentNode); this._input = null; this._createinput(); removeClass(this._button, this._settings.hoverClass); }, /** * Function makes sure that when user clicks upload button, * the this._input is clicked instead */ _rerouteClicks: function () { var self = this; // IE will later display 'access denied' error // if you use using self._input.click() // other browsers just ignore click() addEvent(self._button, 'mouSEOver', function () { if (self._disabled) { return; } if (!self._input) { self._createinput(); } var p = self._input.parentNode; copyLayout(self._button, p); p.style.visibility = 'visible'; }); // commented because we Now hide input on mouseleave /** * When the window is resized the elements * can be misaligned if button position depends * on window size */ //addResizeEvent(function(){ // if (self._input){ // copyLayout(self._button, self._input.parentNode); // } //}); }, /** * Creates iframe with unique name * @return {Element} iframe */ _createIframe: function () { // We can't use getTime, because it sometimes return // same value in safari :( var id = getUID(); // We can't use following code as the name attribute // won't be properly registered in IE6, and new window // on form submit will open // var iframe = document.createElement('iframe'); // iframe.setAttribute('name', id); var iframe = toElement('<iframe src=javascript:false; name=' + id + ' />'); // src=javascript:false; was added // because it possibly removes ie6 prompt // This page contains both secure and nonsecure items // Anyway, it doesn't do any harm. iframe.setAttribute('id', id); iframe.style.display = 'none'; document.body.appendChild(iframe); return iframe; }, /** * Creates form, that will be submitted to iframe * @param {Element} iframe Where to submit * @return {Element} form */ _createForm: function (iframe) { var settings = this._settings; // We can't use the following code in IE6 // var form = document.createElement('form'); // form.setAttribute('method', 'post'); // form.setAttribute('enctype', 'multipart/form-data'); // Because in this case file won't be attached to request var form = toElement('<form method=post enctype=multipart/form-data></form>'); form.setAttribute('action', settings.action); form.setAttribute('target', iframe.name); form.style.display = 'none'; document.body.appendChild(form); // Create hidden input element for each data key for (var prop in settings.data) { if (settings.data.hasOwnProperty(prop)) { var el = document.createElement(input); el.setAttribute('type', 'hidden'); el.setAttribute('name', prop); el.setAttribute('value', settings.data[prop]); form.appendChild(el); } } return form; }, /** * Gets response from iframe and fires onComplete event when ready * @param iframe * @param file Filename to use in onComplete callback */ _getResponse: function (iframe, file) { // getting response var toDeleteFlag = false, self = this, settings = this._settings; addEvent(iframe, 'load', function () { if ( // For Safari iframe.src == javascript:'%3Chtml%3E%3C/html%3E'; || // For FF, IE iframe.src == javascript:'<html></html>';) { // First time around, do not delete. // We reload to blank page, so that reloading main page // does not re-submit the post. if (toDeleteFlag) { // Fix busy state in FF3 setTimeout(function () { removeNode(iframe); }, 0); } return; } var doc = iframe.contentDocument ? iframe.contentDocument : window.frames[iframe.id].document; // fixing Opera 9.26,10.00 if (doc.readyState && doc.readyState != 'complete') { // Opera fires load event multiple times // Even when the DOM is not ready yet // this fix should not affect other browsers return; } // fixing Opera 9.64 if (doc.body && doc.body.innerHTML == false) { // In Opera 9.64 event was fired second time // when body.innerHTML changed from false // to server response approx. after 1 sec return; } var response; if (doc.XMLDocument) { // response is a xml document Internet Explorer property response = doc.XMLDocument; } else if (doc.body) { // response is html document or plain text response = doc.body.innerHTML; if (settings.responseType && settings.responseType.toLowerCase() == 'json') { // If the document was sent as 'application/javascript' or // 'text/javascript', then the browser wraps the text in a <pre> // tag and performs html encoding on the contents. In this case, // we need to pull the original text content from the text node's // nodeValue property to retrieve the unmangled content. // Note that IE6 only understands text/html if (doc.body.firstChild && doc.body.firstChild.nodeName.toupperCase() == 'PRE') { response = doc.body.firstChild.firstChild.nodeValue; } if (response) { response = eval(( + response + )); } else { response = {}; } } } else { // response is a xml document response = doc; } settings.onComplete.call(self, file, response); // Reload blank page, so that reloading main page // does not re-submit the post. Also, remember to // delete the frame toDeleteFlag = true; // Fix IE mixed content issue iframe.src = javascript:'<html></html>';; }); }, /** * Upload file contained in this._input */ submit: function () { var self = this, settings = this._settings; if (!this._input || this._input.value === '') { return; } var file = fileFromPath(this._input.value); // user returned false to cancel upload if (false === settings.onSubmit.call(this, file, getExt(file))) { this._clearinput(); return; } // sending request var iframe = this._createIframe(); var form = this._createForm(iframe); // assuming following structure // p -> input type='file' removeNode(this._input.parentNode); removeClass(self._button, self._settings.hoverClass); form.appendChild(this._input); form.submit(); // request set, clean up removeNode(form); form = null; removeNode(this._input); this._input = null; // Get response from iframe and fire onComplete event when ready this._getResponse(iframe, file); // get ready for next request this._createinput(); } }; })();
相信看了本文案例你已经掌握了方法,更多精彩请关注小编网其它相关文章!
推荐阅读:
jQuery怎么实现左右滑动的toggle
在Vuejs里利用index对第一项添加class的方法
Ajax Upload多文件上传插件介绍 ( github上Api ) -- AjaxUpload上传超时提示.
总结
以上是小编为你收集整理的Ajax Upload多文件上传插件介绍 ( github上Api ) -- AjaxUpload上传超时提示.全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
ajaxfileupload.js+SpringMVC实现文件上传
一、jsp页面
js下载 :
http://download.csdn.net/detail/longtingjing/9725858
js引用:
<script src="/assets/js/jquery.min.js"></script> <script src="/js/ajaxfileupload.js"></script>
<div> <div> 图片: </div> <div> <div id="wait_loading"https://www.jb51.cc/tag/dis/" target="_blank">display:none;"> <div><img src="/imgs/loading.gif"/></div> <br></br> <div><span>请稍等...</span></div> <br></br> </div> <input type="hidden" id="imgurl" name="imgurl" value=""> <img id="imgshow"https://www.jb51.cc/tag/dis/" target="_blank">display:none;" src=" "/> <div> <input type="file" id="file" name="file"> <input type="hidden" id="flag" name="flag" value="ajax文件上传"/> <input type="button" id="btnUpload" onclick="ajaxFileUpload()" value="上传图片" /> </div> </div>
js代码:
function ajaxFileUpload() { // 开始上传文件时显示一个图片 $("#wait_loading").show(); var elementIds=["flag"]; //flag为id、name属性名 $.ajaxFileUpload({ url: '/confMana/upload.html',type: 'post',secureuri: false,//一般设置为false fileElementId: 'file',// 上传文件的id、name属性名 dataType: 'json',//返回值类型,一般设置为json、application/json elementIds: elementIds,//传递参数到服务器 success: function(data,status){ data= $.parseJSON( data ); if(data.success){ $("#wait_loading").hide(); $("#imgurl").val(data.data.imgurl); $("#imgshow").attr("src",data.data.imgurl); $("#imgshow").css("display","block"); alert("上传成功!"); }else{ $("#wait_loading").hide(); alert("上传失败!"); } },error: function(data,status,e){ $("#wait_loading").hide(); alert("请求失败!"); } }); }
二、conntroller
@RequestMapping(value="/confMana/upload.html",method = RequestMethod.POST) public @ResponseBody String uploadForApp(HttpServletRequest request,@RequestParam("file") multipartfile file) throws IllegalStateException,IOException { String relPathOfSavedDir="/uploads/app/"; try { File savedDir = prepareSavedDir(request,relPathOfSavedDir); String savedFileName=getSavedFileName(file.getoriginalFilename()); file.transferTo(new File(savedDir,savedFileName)); String imgurl=relPathOfSavedDir+savedFileName; Map<String,Object> map=new HashMap<>(); map.put("imgurl",imgurl); return toObjJson(map); } catch (Exception e) { return null; } } private File prepareSavedDir(HttpServletRequest request,String relativePath) throws Exception{ File dir=new File(request.getSession().getServletContext().getRealPath(relativePath)); if(!dir.exists()){ if(!dir.mkdirs()){ throw new Exception("创建保存目录失败"); } } return dir; } private String getSavedFileName(String origFileName){ return RandomStringUtils.randomNumeric(8)+"."+FilenameUtils.getExtension(origFileName); }如果出现上传进不了success请参照:
http://blog.csdn.net/qq_32588349/article/details/52056283
ajaxfileupload.js实现文件上传(附步骤代码)
这次给大家带来ajaxfileupload.js实现文件上传(附步骤代码),ajaxfileupload.js实现文件上传的注意事项有哪些,下面就是实战案例,一起来看一下。
AjaxUpLoad.js的使用实现无刷新文件上传,如图
1、创建页面并编写HTML上传文档:
<p> <span><input></span> <input> <input> <input> </p>
上传图片:
<p> <img alt="ajaxfileupload.js实现文件上传(附步骤代码)" > <input> <input> <input> </p>
2、引用AjaxUpload.js文件
3、编写JS脚本
window.onload = function() { init(); //初始化 } //初始化 function init() { //初始化文档上传 var btnFile = document.getElementById("btnUploadFile"); var doc = document.getElementById("doc"); var hidFileName = document.getElementById("hidFileName"); document.getElementById("btnDeleteFile").onclick = function() { DelFile(doc, hidFileName); }; g_AjxUploadFile(btnFile, doc, hidFileName); //初始化图片上传 var btnImg = document.getElementById("btnUploadImg"); var img = document.getElementById("imgShow"); var hidImgName = document.getElementById("hidImgName"); document.getElementById("btnDeleteImg").onclick = function() { DelImg(img, hidImgName); }; g_AjxUploadImg(btnImg, img, hidImgName); } var g_AjxTempDir = "/file/temp/"; //文档上传 function g_AjxUploadFile(btn, doc, hidPut, action) { var button = btn, interval; new AjaxUpload(button, { action: ((action == null || action == undefined) ? ''/Common/UploadHandler.ashx?fileType=file'' : action), data: {}, name: ''myfile'', onSubmit: function(file, ext) { if (!(ext && /^(rar|zip|pdf|pdfx|txt|csv|xls|xlsx|doc|docx|RAR|ZIP|PDF|PDFX|TXT|CSV|XLS|XLSX|DOC|DOCX)$/.test(ext))) { alert("您上传的文档格式不对,请重新选择!"); return false; } }, onComplete: function(file, response) { flagValue = response; if (flagValue == "1") { alert("您上传的文档格式不对,请重新选择!"); } else if (flagValue == "2") { alert("您上传的文档大于2M,请重新选择!"); } else if (flagValue == "3") { alert("文档上传失败!"); } else { hidPut.value = response; doc.innerHTML="<a>" + response + "</a>"; } } }); } //图片上传 function g_AjxUploadImg(btn, img, hidPut) { var button = btn, interval; new AjaxUpload(button, { action: ''/Common/UploadHandler.ashx?fileType=img'', data: {}, name: ''myfile'', onSubmit: function(file, ext) { if (!(ext && /^(jpg|JPG|png|PNG|gif|GIF)$/.test(ext))) { alert("您上传的图片格式不对,请重新选择!"); return false; } }, onComplete: function(file, response) { flagValue = response; if (flagValue == "1") { alert("您上传的图片格式不对,请重新选择!"); } else if (flagValue == "2") { alert("您上传的图片大于200K,请重新选择!"); } else if (flagValue == "3") { alert("图片上传失败!"); } else { hidPut.value = response; img.src = g_AjxTempDir + response; } } }); } //删除文档 function DelFile(doc, hidPut) { hidPut.value = ""; doc.innerHTML = "<input>"; } //删除图片 function DelImg(img, hidPut) { hidPut.value = ""; img.src = "/images/nophoto.gif"; }
4、创建/Common/UploadHandler.ashx处理程序
using System; using System.Web; using System.Text.RegularExpressions; using System.IO; public class UploadHandler : IHttpHandler { private string _filedir = ""; //文件目录 /// <summary> /// 处理上传文件(1:文件格式不正确、2:文件大小不正确、3:上传失败、文件名称:上传成功) /// </summary> /// <param> public void ProcessRequest (HttpContext context) { _filedir = context.Server.MapPath(@"/file/temp/"); try { string result = "3"; string fileType = context.Request.QueryString["fileType"]; //获取上传文件类型 if (fileType == "file") { result = UploadFile(context); //文档上传 } else if (fileType == "img") { result = UploadImg(context); //图片上传 } context.Response.Write(result); } catch { context.Response.Write("3");//3文件上传失败 } } /// <summary> /// 文档上传 /// </summary> /// <param> /// <returns></returns> private string UploadFile(HttpContext context) { int cout = context.Request.Files.Count; if (cout > 0) { HttpPostedFile hpf = context.Request.Files[0]; if (hpf != null) { string fileExt = Path.GetExtension(hpf.FileName).ToLower(); //只能上传文件,过滤不可上传的文件类型 string fileFilt = ".rar|.zip|.pdf|.pdfx|.txt|.csv|.xls|.xlsx|.doc|.docx......"; if (fileFilt.IndexOf(fileExt) 2097152) { return "2"; } Random rd = new Random(); DateTime nowTime = DateTime.Now; string newFileName = nowTime.Year.ToString() + nowTime.Month.ToString() + nowTime.Day.ToString() + nowTime.Hour.ToString() + nowTime.Minute.ToString() + nowTime.Second.ToString() + rd.Next(1000, 1000000) + Path.GetExtension(hpf.FileName); if (!Directory.Exists(_filedir)) { Directory.CreateDirectory(_filedir); } string fileName = _filedir + newFileName; hpf.SaveAs(fileName); return newFileName; } } return "3"; } /// <summary> /// 图片上传 /// </summary> /// <param> /// <returns></returns> private string UploadImg(HttpContext context) { int cout = context.Request.Files.Count; if (cout > 0) { HttpPostedFile hpf = context.Request.Files[0]; if (hpf != null) { string fileExt = Path.GetExtension(hpf.FileName).ToLower(); //只能上传文件,过滤不可上传的文件类型 string fileFilt = ".gif|.jpg|.php|.jsp|.jpeg|.png|......"; if (fileFilt.IndexOf(fileExt) 204800) { return "2"; } Random rd = new Random(); DateTime nowTime = DateTime.Now; string newFileName = nowTime.Year.ToString() + nowTime.Month.ToString() + nowTime.Day.ToString() + nowTime.Hour.ToString() + nowTime.Minute.ToString() + nowTime.Second.ToString() + rd.Next(1000, 1000000) + Path.GetExtension(hpf.FileName); if (!Directory.Exists(_filedir)) { Directory.CreateDirectory(_filedir); } string fileName = _filedir + newFileName; hpf.SaveAs(fileName); return newFileName; } } return "3"; } #region IHttpHandler 成员 public bool IsReusable { get { throw new NotImplementedException(); } } #endregion }
附件1:页面CSS样式
/*上传文件*/ .uploadFile{margin-bottom:10px;} /*上传图片*/ .uploadImg{} .uploadImg img{width:102px; height:64px; border:1px solid #CCCCCC; display: block;}
附件2:AjaxUpload.js文件
/** * AJAX Upload ( http://valums.com/ajax-upload/ ) * Copyright (c) Andris Valums * Licensed under the MIT license ( http://valums.com/mit-license/ ) * Thanks to Gary Haran, David Mark, Corey Burns and others for contributions */ (function () { /* global window */ /* jslint browser: true, devel: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true */ /** * Wrapper for FireBug''s console.log */ function log() { if (typeof(console) != ''undefined'' && typeof(console.log) == ''function'') { Array.prototype.unshift.call(arguments, ''[Ajax Upload]''); console.log(Array.prototype.join.call(arguments, '' '')); } } /** * Attaches event to a dom element. * @param {Element} el * @param type event name * @param fn callback This refers to the passed element */ function addEvent(el, type, fn) { if (el.addEventListener) { el.addEventListener(type, fn, false); } else if (el.attachEvent) { el.attachEvent(''on'' + type, function () { fn.call(el); }); } else { throw new Error(''not supported or DOM not loaded''); } } /** * Attaches resize event to a window, limiting * number of event fired. Fires only when encounteres * delay of 100 after series of events. * * Some browsers fire event multiple times when resizing * http://www.quirksmode.org/dom/events/resize.html * * @param fn callback This refers to the passed element */ function addResizeEvent(fn) { var timeout; addEvent(window, ''resize'', function () { if (timeout) { clearTimeout(timeout); } timeout = setTimeout(fn, 100); }); } // Needs more testing, will be rewriten for next version // getOffset function copied from jQuery lib (http://jquery.com/) if (document.documentElement.getBoundingClientRect) { // Get Offset using getBoundingClientRect // http://ejohn.org/blog/getboundingclientrect-is-awesome/ var getOffset = function (el) { var box = el.getBoundingClientRect(); var doc = el.ownerDocument; var body = doc.body; var docElem = doc.documentElement; // for ie var clientTop = docElem.clientTop || body.clientTop || 0; var clientLeft = docElem.clientLeft || body.clientLeft || 0; // In Internet Explorer 7 getBoundingClientRect property is treated as physical, // while others are logical. Make all logical, like in IE8. var zoom = 1; if (body.getBoundingClientRect) { var bound = body.getBoundingClientRect(); zoom = (bound.right - bound.left) / body.clientWidth; } if (zoom > 1) { clientTop = 0; clientLeft = 0; } var top = box.top / zoom + (window.pageYOffset || docElem && docElem.scrollTop / zoom || body.scrollTop / zoom) - clientTop, left = box.left / zoom + (window.pageXOffset || docElem && docElem.scrollLeft / zoom || body.scrollLeft / zoom) - clientLeft; return { top: top, left: left }; }; } else { // Get offset adding all offsets var getOffset = function (el) { var top = 0, left = 0; do { top += el.offsetTop || 0; left += el.offsetLeft || 0; el = el.offsetParent; } while (el); return { left: left, top: top }; }; } /** * Returns left, top, right and bottom properties describing the border-box, * in pixels, with the top-left relative to the body * @param {Element} el * @return {Object} Contains left, top, right,bottom */ function getBox(el) { var left, right, top, bottom; var offset = getOffset(el); left = offset.left; top = offset.top; right = left + el.offsetWidth; bottom = top + el.offsetHeight; return { left: left, right: right, top: top, bottom: bottom }; } /** * Helper that takes object literal * and add all properties to element.style * @param {Element} el * @param {Object} styles */ function addStyles(el, styles) { for (var name in styles) { if (styles.hasOwnProperty(name)) { el.style[name] = styles[name]; } } } /** * Function places an absolutely positioned * element on top of the specified element * copying position and dimentions. * @param {Element} from * @param {Element} to */ function copyLayout(from, to) { var box = getBox(from); addStyles(to, { position: ''absolute'', left: box.left + ''px'', top: box.top + ''px'', width: from.offsetWidth + ''px'', height: from.offsetHeight + ''px'' }); } /** * Creates and returns element from html chunk * Uses innerHTML to create an element */ var toElement = (function () { var p = document.createElement(''p''); return function (html) { p.innerHTML = html; var el = p.firstChild; return p.removeChild(el); }; })(); /** * Function generates unique id * @return unique id */ var getUID = (function () { var id = 0; return function () { return ''ValumsAjaxUpload'' + id++; }; })(); /** * Get file name from path * @param {String} file path to file * @return filename */ function fileFromPath(file) { return file.replace(/.*(\/|\\)/, ""); } /** * Get file extension lowercase * @param {String} file name * @return file extenstion */ function getExt(file) { return (-1 !== file.indexOf(''.'')) ? file.replace(/.*[.]/, '''') : ''''; } function hasClass(el, name) { var re = new RegExp(''\\b'' + name + ''\\b''); return re.test(el.className); } function addClass(el, name) { if (!hasClass(el, name)) { el.className += '' '' + name; } } function removeClass(el, name) { var re = new RegExp(''\\b'' + name + ''\\b''); el.className = el.className.replace(re, ''''); } function removeNode(el) { el.parentNode.removeChild(el); } /** * Easy styling and uploading * @constructor * @param button An element you want convert to * upload button. Tested dimentions up to 500x500px * @param {Object} options See defaults below. */ window.AjaxUpload = function (button, options) { this._settings = { // Location of the server-side upload script action: ''upload.php'', // File upload name name: ''userfile'', // Additional data to send data: {}, // Submit file as soon as it''s selected autoSubmit: true, // The type of data that you''re expecting back from the server. // html and xml are detected automatically. // Only useful when you are using json data as a response. // Set to "json" in that case. responseType: false, // Class applied to button when mouse is hovered hoverClass: ''hover'', // Class applied to button when AU is disabled disabledClass: ''disabled'', // When user selects a file, useful with autoSubmit disabled // You can return false to cancel upload onChange: function (file, extension) {}, // Callback to fire before file is uploaded // You can return false to cancel upload onSubmit: function (file, extension) {}, // Fired when file upload is completed // WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE! onComplete: function (file, response) {} }; // Merge the users options with our defaults for (var i in options) { if (options.hasOwnProperty(i)) { this._settings[i] = options[i]; } } // button isn''t necessary a dom element if (button.jquery) { // jQuery object was passed button = button[0]; } else if (typeof button == "string") { if (/^#.*/.test(button)) { // If jQuery user passes #elementId don''t break it button = button.slice(1); } button = document.getElementById(button); } if (!button || button.nodeType !== 1) { throw new Error("Please make sure that you''re passing a valid element"); } if (button.nodeName.toUpperCase() == ''A'') { // disable link addEvent(button, ''click'', function (e) { if (e && e.preventDefault) { e.preventDefault(); } else if (window.event) { window.event.returnValue = false; } }); } // DOM element this._button = button; // DOM element this._input = null; // If disabled clicking on button won''t do anything this._disabled = false; // if the button was disabled before refresh if will remain // disabled in FireFox, let''s fix it this.enable(); this._rerouteClicks(); }; // assigning methods to our class AjaxUpload.prototype = { setData: function (data) { this._settings.data = data; }, disable: function () { addClass(this._button, this._settings.disabledClass); this._disabled = true; var nodeName = this._button.nodeName.toUpperCase(); if (nodeName == ''INPUT'' || nodeName == ''BUTTON'') { this._button.setAttribute(''disabled'', ''disabled''); } // hide input if (this._input) { // We use visibility instead of display to fix problem with Safari 4 // The problem is that the value of input doesn''t change if it // has display none when user selects a file this._input.parentNode.style.visibility = ''hidden''; } }, enable: function () { removeClass(this._button, this._settings.disabledClass); this._button.removeAttribute(''disabled''); this._disabled = false; }, /** * Creates invisible file input * that will hover above the button * <p><input></p> */ _createInput: function () { var self = this; var input = document.createElement("input"); input.setAttribute(''type'', ''file''); input.setAttribute(''name'', this._settings.name); addStyles(input, { ''position'': ''absolute'', // in Opera only ''browse'' button // is clickable and it is located at // the right side of the input ''right'': 0, ''margin'': 0, ''padding'': 0, ''fontSize'': ''480px'', ''cursor'': ''pointer'' }); var p = document.createElement("p"); addStyles(p, { ''display'': ''block'', ''position'': ''absolute'', ''overflow'': ''hidden'', ''margin'': 0, ''padding'': 0, ''opacity'': 0, // Make sure browse button is in the right side // in Internet Explorer ''direction'': ''ltr'', //Max zIndex supported by Opera 9.0-9.2 ''zIndex'': 2147483583 }); // Make sure that element opacity exists. // Otherwise use IE filter if (p.style.opacity !== "0") { if (typeof(p.filters) == ''undefined'') { throw new Error(''Opacity not supported by the browser''); } p.style.filter = "alpha(opacity=0)"; } addEvent(input, ''change'', function () { if (!input || input.value === '''') { return; } // Get filename from input, required // as some browsers have path instead of it var file = fileFromPath(input.value); if (false === self._settings.onChange.call(self, file, getExt(file))) { self._clearInput(); return; } // Submit form when value is changed if (self._settings.autoSubmit) { self.submit(); } }); addEvent(input, ''mouseover'', function () { addClass(self._button, self._settings.hoverClass); }); addEvent(input, ''mouseout'', function () { removeClass(self._button, self._settings.hoverClass); // We use visibility instead of display to fix problem with Safari 4 // The problem is that the value of input doesn''t change if it // has display none when user selects a file input.parentNode.style.visibility = ''hidden''; }); p.appendChild(input); document.body.appendChild(p); this._input = input; }, _clearInput: function () { if (!this._input) { return; } // this._input.value = ''''; Doesn''t work in IE6 removeNode(this._input.parentNode); this._input = null; this._createInput(); removeClass(this._button, this._settings.hoverClass); }, /** * Function makes sure that when user clicks upload button, * the this._input is clicked instead */ _rerouteClicks: function () { var self = this; // IE will later display ''access denied'' error // if you use using self._input.click() // other browsers just ignore click() addEvent(self._button, ''mouseover'', function () { if (self._disabled) { return; } if (!self._input) { self._createInput(); } var p = self._input.parentNode; copyLayout(self._button, p); p.style.visibility = ''visible''; }); // commented because we now hide input on mouseleave /** * When the window is resized the elements * can be misaligned if button position depends * on window size */ //addResizeEvent(function(){ // if (self._input){ // copyLayout(self._button, self._input.parentNode); // } //}); }, /** * Creates iframe with unique name * @return {Element} iframe */ _createIframe: function () { // We can''t use getTime, because it sometimes return // same value in safari :( var id = getUID(); // We can''t use following code as the name attribute // won''t be properly registered in IE6, and new window // on form submit will open // var iframe = document.createElement(''iframe''); // iframe.setAttribute(''name'', id); var iframe = toElement(''<iframe></iframe>''); // src="javascript:false; was added // because it possibly removes ie6 prompt // "This page contains both secure and nonsecure items" // Anyway, it doesn''t do any harm. iframe.setAttribute(''id'', id); iframe.style.display = ''none''; document.body.appendChild(iframe); return iframe; }, /** * Creates form, that will be submitted to iframe * @param {Element} iframe Where to submit * @return {Element} form */ _createForm: function (iframe) { var settings = this._settings; // We can''t use the following code in IE6 // var form = document.createElement(''form''); // form.setAttribute(''method'', ''post''); // form.setAttribute(''enctype'', ''multipart/form-data''); // Because in this case file won''t be attached to request var form = toElement(''
// tag and performs html encoding on the contents. In this case, // we need to pull the original text content from the text node''s // nodeValue property to retrieve the unmangled content. // Note that IE6 only understands text/html if (doc.body.firstChild && doc.body.firstChild.nodeName.toUpperCase() == ''PRE'') { response = doc.body.firstChild.firstChild.nodeValue; } if (response) { response = eval("(" + response + ")"); } else { response = {}; } } } else { // response is a xml document response = doc; } settings.onComplete.call(self, file, response); // Reload blank page, so that reloading main page // does not re-submit the post. Also, remember to // delete the frame toDeleteFlag = true; // Fix IE mixed content issue iframe.src = "javascript:'''';"; }); }, /** * Upload file contained in this._input */ submit: function () { var self = this, settings = this._settings; if (!this._input || this._input.value === '''') { return; } var file = fileFromPath(this._input.value); // user returned false to cancel upload if (false === settings.onSubmit.call(this, file, getExt(file))) { this._clearInput(); return; } // sending request var iframe = this._createIframe(); var form = this._createForm(iframe); // assuming following structure // p -> input type=''file'' removeNode(this._input.parentNode); removeClass(self._button, self._settings.hoverClass); form.appendChild(this._input); form.submit(); // request set, clean up removeNode(form); form = null; removeNode(this._input); this._input = null; // Get response from iframe and fire onComplete event when ready this._getResponse(iframe, file); // get ready for next request this._createInput(); } }; })();
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
jQuery+ajax实现文件上传(附代码)
jQuery EasyUI插件怎么创建菜单链接按钮
以上就是ajaxfileupload.js实现文件上传(附步骤代码)的详细内容,更多请关注php中文网其它相关文章!
ajaxfileupload.js实现文件异步上传
html中:
var param = $("#inputForm").serialize(); url = $("#inputForm").attr("action"); $.ajaxFileUpload({ url: url,secureuri: false,fileElementId: 'biCardFile' dataType: 'json',success: function (data,status) { if (data.result == '0') { layer.alert(data.resultMsg,1,function() { $("#searchForm",window.parent.document).attr("action","${ctx}/merchant/merchantIdentity/"); $("#searchForm",window.parent.document).submit(); }); } else { layer.alert(data.resultMsg); } },error: function (data,status,e) { layer.alert("修改失败"); } });注意:form表单的提交方式method="post";enctype="multipart/form-data"
另外:有童鞋修改js代码支持多文件异步上传,区别为fileElementId后面的参数
var param = $("#inputForm").serialize(); url = $("#inputForm").attr("action"); $.ajaxFileUpload({ url: url,fileElementId: ['biCardFile','taxCardFile','orgCardFile'],dataType: 'json',e) { layer.alert("修改失败"); } });
//修改前 //if(fileElement == null) //oldElement = jQuery('#' + fileElementId[i]); //else //oldElement = fileElement; //var newElement = jQuery(oldElement).clone(); //jQuery(oldElement).attr('id',fileId); //jQuery(oldElement).before(newElement); //jQuery(oldElement).appendTo(form); //修改后 for(var i in fileElementId){ if(fileElement == null) oldElement = jQuery('#' + fileElementId[i]); else oldElement = fileElement; var newElement = jQuery(oldElement).clone(); jQuery(oldElement).attr('id',fileId); jQuery(oldElement).before(newElement); jQuery(oldElement).appendTo(form); }
修改位置大概40行左右
ajaxfileupload修改前后对比
另外,dataType=“json”可能导致不管请求成功或失败都会回调error。因为返回的json字符串被包装为<pre>json</pre>。
解决方法为:
//修改前 //eval( "data = " + data ); //修改后 data = jQuery.parseJSON(jQuery(data).text());
修改位置大概215行左右
修改版本ajaxfileupload.js下载
今天关于AjaxUpLoad.js怎么实现文件上传和ajaxuploadfile的介绍到此结束,谢谢您的阅读,有关Ajax Upload多文件上传插件介绍 ( github上Api ) -- AjaxUpload上传超时提示.、ajaxfileupload.js+SpringMVC实现文件上传、ajaxfileupload.js实现文件上传(附步骤代码)、ajaxfileupload.js实现文件异步上传等更多相关知识的信息可以在本站进行查询。
本文标签: