https://www.cnblogs.com/front-end-develop/p/6214818.html

第一步:html中引入jQuery-1.7.1.js和ajaxFileUpload.js

 1 <!DOCTYPE html>
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <title>企业年金数据校验平台</title>
5 <link href="css/index.css" rel="stylesheet" type="text/css" />
6 </head>
7 <body>
8 <div class="container">
9 <div class="head">
10 <div class="user-nav">
11 <div class="user-info">
12 <span id="username"></span><span class="logout can-click">退出</span>
13 </div>
14 </div>
15 <div class="nav-title">
16 <span>企业年金数据校验平台</span>
17 </div>
18 <!-- <div class="nav-attention">
19 <img alt="light" src="data:images/atten_light.gif" class="atten-light" />
20 <span class="">重要提醒:</span> <span>XXXXXXXXXXX</span>
21 </div>-->
22 </div>
23 <div class="main">
24 <div class="main-nav">
25
26 </div>
27 <div class="main-top">
28 <div class="main-tl">
29 <div class="exl-submit">
30 <span class="exl-submit-til">Excel上传</span> <a class="btn-upload exl-submit-can"
31 id="btn-upload" href="#">
32 <input type="file" id="excel_upload" name="file" />
33 </a>
34 </div>
35 </div>
36 <div class="main-tr">
37 </div>
38 </div>
39 <div class="main-mid">
40 </div>
41 <div class="main-bottom">
42 <div id="loading_info" class="loading-info">
43 </div>
44 <div id="execute_result" class="execute-result">
45 <div id="result-step-two" class="result-wrap">
46 <div class="result-left"></div>
47 <div class="result-right"></div>
48 </div>
49 <div id="result-step-three" class="result-wrap">
50 </div>
51 <div id="result-step-four" class="result-wrap">
52 </div>
53
54 </div>
55 </div>
56 </div>
57 </div>
58 </body>
59 <script src="http://xxx.xxx.xxx.xxx/commonScript/jquery/jquery-1.7.1.min.js" type="text/javascript"></script>
60 <script src="http://xxx.xxx.xxx.xxx/commonScript/format.js" type="text/javascript"></script>
61 <script src="js/ajaxfileupload.js" type="text/javascript"></script>
62 <script src="js/tools.js" type="text/javascript"></script>
63 <script src="js/index.js" type="text/javascript"></script>
64 </html>

第二步:ajaxFileUpload.js代码

  1 jQuery.extend({
2 handleError: function (s, xhr, status, e) {
3 // If a local callback was specified, fire it
4 if (s.error) {
5 s.error.call(s.context || s, xhr, status, e);
6 }
7
8 // Fire the global callback
9 if (s.global) {
10 (s.context ? jQuery(s.context) : jQuery.event).trigger("ajaxError", [xhr, s, e]);
11 }
12 },
13 createUploadIframe: function (id, uri) {
14
15 var frameId = 'jUploadFrame' + id;
16
17 if (window.ActiveXObject) {
18 if (jQuery.browser.version == "9.0") {
19 io = document.createElement('iframe');
20 io.id = frameId;
21 io.name = frameId;
22 }
23 else if (jQuery.browser.version == "6.0" || jQuery.browser.version == "7.0" || jQuery.browser.version == "8.0") {
24
25 var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
26 if (typeof uri == 'boolean') {
27 io.src = 'javascript:false';
28 }
29 else if (typeof uri == 'string') {
30 io.src = uri;
31 }
32 }
33 }
34 else {
35 var io = document.createElement('iframe');
36 io.id = frameId;
37 io.name = frameId;
38 }
39 io.style.position = 'absolute';
40 io.style.top = '-1000px';
41 io.style.left = '-1000px';
42
43 document.body.appendChild(io);
44
45 return io;
46 },
47 ajaxUpload: function (s, xml) {
48 //if((fromFiles.nodeType&&!((fileList=fromFiles.files)&&fileList[0].name)))
49
50 var uid = new Date().getTime(), idIO = 'jUploadFrame' + uid, _this = this;
51 var jIO = $('<iframe name="' + idIO + '" id="' + idIO + '" style="display:none">').appendTo('body');
52 var jForm = $('<form action="' + s.url + '" target="' + idIO + '" method="post" enctype="multipart/form-data" style="display:none"></form>').appendTo('body');
53 var oldElement = $('#' + s.fileElementId);
54 var newElement = $(oldElement).clone();
55 $(oldElement).attr('id', 'jUploadFile' + uid);
56 $(oldElement).before(newElement);
57 $(oldElement).appendTo(jForm);
58
59 this.remove = function () {
60 if (_this !== null) {
61 jNewFile.before(jOldFile).remove();
62 jIO.remove(); jForm.remove();
63 _this = null;
64 }
65 }
66 this.onLoad = function () {
67
68 var data = $(jIO[0].contentWindow.document.body).text();
69
70 try {
71
72 if (data != undefined) {
73 data = eval('(' + data + ')');
74 try {
75
76 if (s.success)
77 s.success(data, status);
78
79 // Fire the global callback
80 if (s.global)
81 jQuery.event.trigger("ajaxSuccess", [xml, s]);
82 if (s.complete)
83 s.complete(data, status);
84 xml = null;
85 } catch (e) {
86
87 status = "error";
88 jQuery.handleError(s, xml, status, e);
89 }
90
91 // The request was completed
92 if (s.global)
93 jQuery.event.trigger("ajaxComplete", [xml, s]);
94 // Handle the global AJAX counter
95 if (s.global && ! --jQuery.active)
96 jQuery.event.trigger("ajaxStop");
97
98 // Process result
99
100 }
101 } catch (ex) {
102 alert(ex.message);
103 };
104 }
105 this.start = function () { jForm.submit(); jIO.load(_this.onLoad); };
106 return this;
107
108 },
109 createUploadForm: function (id, url, fileElementId, data) {
110 //create form
111 var formId = 'jUploadForm' + id;
112 var fileId = 'jUploadFile' + id;
113 var form = jQuery('<form action="' + url + '" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');
114 if (data) {
115 for (var i in data) {
116 jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
117 }
118 }
119
120 var oldElement = jQuery('#' + fileElementId);
121 var newElement = jQuery(oldElement).clone();
122 jQuery(oldElement).attr('id', fileId);
123 jQuery(oldElement).before(newElement);
124 jQuery(oldElement).appendTo(form);
125
126 //set attributes
127 jQuery(form).css('position', 'absolute');
128 jQuery(form).css('top', '-1200px');
129 jQuery(form).css('left', '-1200px');
130 jQuery(form).appendTo('body');
131 return form;
132 },
133 ajaxFileUpload: function (s) {
134 // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
135 // Create the request object
136 var xml = {};
137 s = jQuery.extend({}, jQuery.ajaxSettings, s);
138 if (window.ActiveXObject) {
139 var upload = new jQuery.ajaxUpload(s, xml);
140 upload.start();
141
142 } else {
143 var id = new Date().getTime();
144 var form = jQuery.createUploadForm(id, s.url, s.fileElementId, (typeof (s.data) == 'undefined' ? false : s.data));
145 var io = jQuery.createUploadIframe(id, s.secureuri);
146 var frameId = 'jUploadFrame' + id;
147 var formId = 'jUploadForm' + id;
148 // Watch for a new set of requests
149 if (s.global && !jQuery.active++) {
150 jQuery.event.trigger("ajaxStart");
151 }
152 var requestDone = false;
153
154 if (s.global)
155 jQuery.event.trigger("ajaxSend", [xml, s]);
156 // Wait for a response to come back
157 var uploadCallback = function (isTimeout) {
158 var io = document.getElementById(frameId);
159
160 try {
161 if (io.contentWindow) {
162 xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML : null;
163 xml.responseXML = io.contentWindow.document.XMLDocument ? io.contentWindow.document.XMLDocument : io.contentWindow.document;
164
165 } else if (io.contentDocument) {
166 xml.responseText = io.contentDocument.document.body ? io.contentDocument.document.body.innerHTML : null;
167 xml.responseXML = io.contentDocument.document.XMLDocument ? io.contentDocument.document.XMLDocument : io.contentDocument.document;
168 }
169 } catch (e) {
170 jQuery.handleError(s, xml, null, e);
171 }
172 if (xml || isTimeout == "timeout") {
173 requestDone = true;
174 var status;
175 try {
176 status = isTimeout != "timeout" ? "success" : "error";
177 // Make sure that the request was successful or notmodified
178 if (status != "error") {
179 // process the data (runs the xml through httpData regardless of callback)
180 var data = jQuery.uploadHttpData(xml, s.dataType);
181 // If a local callback was specified, fire it and pass it the data
182
183 if (s.success)
184 s.success(data, status);
185
186 // Fire the global callback
187 if (s.global)
188 jQuery.event.trigger("ajaxSuccess", [xml, s]);
189 if (s.complete)
190 s.complete(data, status);
191
192 } else
193 jQuery.handleError(s, xml, status);
194 } catch (e) {
195 status = "error";
196 jQuery.handleError(s, xml, status, e);
197 }
198
199 // The request was completed
200 if (s.global)
201 jQuery.event.trigger("ajaxComplete", [xml, s]);
202 // Handle the global AJAX counter
203 if (s.global && ! --jQuery.active)
204 jQuery.event.trigger("ajaxStop");
205
206 // Process result
207 jQuery(io).unbind();
208
209 setTimeout(function () {
210 try {
211 jQuery(io).remove();
212 jQuery(form).remove();
213
214 } catch (e) {
215 jQuery.handleError(s, xml, null, e);
216 }
217
218 }, 100);
219
220 xml = null;
221
222 }
223 };
224 // Timeout checker
225 if (s.timeout > 0) {
226 setTimeout(function () {
227 // Check to see if the request is still happening
228 if (!requestDone) uploadCallback("timeout");
229 }, s.timeout);
230 }
231
232 try {
233
234 var form = jQuery('#' + formId);
235 jQuery(form).attr('action', s.url);
236 jQuery(form).attr('method', 'POST');
237 jQuery(form).attr('target', frameId);
238
239 if (form.encoding) {
240 jQuery(form).attr('encoding', 'multipart/form-data');
241 }
242 else {
243 jQuery(form).attr('enctype', 'multipart/form-data');
244 }
245
246
247 jQuery(form).submit();
248
249 } catch (e) {
250 jQuery.handleError(s, xml, null, e);
251 }
252
253 jQuery('#' + frameId).load(uploadCallback);
254 return { abort: function () { } };
255
256 }
257 },
258
259 uploadHttpData: function (r, type) {
260
261 var data = !type;
262 data = type == "xml" || data ? r.responseXML : r.responseText;
263 // If the type is "script", eval it in global context
264 if (type == "script")
265 jQuery.globalEval(data);
266 // Get the JavaScript object, if JSON is used.
267 if (type == "json") {
268
269 //eval("data = " + $(data).html());//默认方式,在ie下不好使
270 //data = jQuery.parseJSON(jQuery(data).text());//第一次修改后,ie7、8、9、10可用,ie11不可用
271 try {
272 data = jQuery.parseJSON(data); //第二次修改,ie全兼容
273 } catch (e) {
274 data = jQuery.parseJSON(jQuery(data).text());
275 }
276
277 }
278 // evaluate scripts within html
279 if (type == "html")
280 jQuery("<div>").html(data).evalScripts();
281
282 return data;
283 }
284 });

第三步:index.js代码

 1 function fnExcelUpload(event) {
2 /// <summary>上传Excel</summary>
3 /// <param name="event" type="Object">file对象</param>
4 fnPushMainTr();
5
6 $.ajaxFileUpload({
7 url: "Service.ashx?Type=Upload",
8 secureuri: false, // 一般设置为false
9 fileElementId: "excel_upload", // 文件上传表单的id <input type="file" id="fileUpload" name="file" />
10 dataType: 'json', // 返回值类型 一般设置为json
11 success: function (data) {
12 if (!data || data.reuslt == 'error' || data.result == 'warning') {
13 fnErrorMsg(data);
14 return;
15 }
16 //设置上传Excel按钮样式
17 $('#btn-upload').removeClass('exl-submit-can').addClass('exl-submit-no').children('input').attr('disabled', true);
18 //设置第一步的样式,并增加文字提示“完成”
19 $('#step_one').removeClass('step-one-a').addClass('step-one-b').siblings('p:last').addClass('fc-green').children('span').text('完成')
20 .parents('li').addClass('fc-green');
21 $('#loading_info').html('<span class="progress">Excel格式校验进行中</span>');
22 setTimeout(function () {
23 fnGetState();
24 }, 1000);
25
26 },
27 error: function (data)// 服务器响应失败处理函数
28 {
29 console.log("服务器异常");
30 }
31 });
32 }

注:使用ajaxFileUpload.js上传excel文件时,在ie9以上会弹出下载窗口,ie7/8会报错缺少“)”,这是因为服务端返回的数据是json,ie无法解析导致的,

  如果之前是application/json的话就会弹出下载窗口,需要将服务器响应头修改为:Content-Type:text/html;charset=UTF-8即可

例子:

后台:

[HttpPost]
public void UploadImg()
{
var context = System.Web.HttpContext.Current;
context.Response.ContentType = "text/html;charset=UTF-8";
var httpRequest = context.Request;
if (httpRequest.Files.Count > 0)
{
try
{
string url = string.Empty;
//foreach (string file in httpRequest.Files)
//{
var postedFile = httpRequest.Files[httpRequest.Files.AllKeys[0]];
int imageLength = postedFile.ContentLength;//取得图片大小,以字节为单位 byte[] imageByteArray = new byte[imageLength]; //图片将临时存储在Byte(二进制)数组 Stream imageStream = postedFile.InputStream;//建立流对象
var type=Path.GetExtension(postedFile.FileName);//取得文件扩展名
imageStream.Read(imageByteArray, 0, imageLength);//将图片读取到imageByteArray数组中,其中0为起始位置,imageLength为要读取的长度 var model = new tbl_OfficeSupplies_GoodsImg();
model.ID = Guid.NewGuid();
model.Type = type;
model.Img = imageByteArray;
model.Size = imageLength;
model.GoodSpecificationID = new Guid(httpRequest["GoodSpecificationID"]); //删除有的
var toDeleteModel= this.Tbl_OfficeSupplies_GoodsImgBLL.LoadEntities(a=>a.GoodSpecificationID== model.GoodSpecificationID).FirstOrDefault();
if (toDeleteModel!=null)
{
//model.ID = toDeleteModel.ID;
toDeleteModel.Type = type;
toDeleteModel.Img = imageByteArray;
toDeleteModel.Size = imageLength;
toDeleteModel.GoodSpecificationID = new Guid(httpRequest["GoodSpecificationID"]);
this.Tbl_OfficeSupplies_GoodsImgBLL.EditEntity(toDeleteModel);
}
else {
this.Tbl_OfficeSupplies_GoodsImgBLL.AddEntity(model);
} context.Response.Write("1");//{'code' = '1', 'msg' = '上传成功'} context.Response.End();
//Common.JsonHelper.toJson(new { code = "1", msg = "上传成功" });
}
catch (Exception ex)
{
context.Response.Write("-1");//{'code' = '-1', 'msg' = '上传失败'} context.Response.End();
//return Common.JsonHelper.toJson(new { code = "-1", msg = "上传失败" });
} }
else
{
context.Response.Write("2");//{'code' = '2', 'msg' = '没有选择图片'} context.Response.End();
//return Common.JsonHelper.toJson(new { code = "2", msg = "没有选择图片" });
}
}

  HTML:

<div style="padding:10px 0 10px 60px">
<table style="width:450px;height:300px;padding:2px;">
<tr style="display:none;">
<td>规格ID:</td>
<td><input id="GoodsSpecificationID" class="easyui-validatebox" type="text" name="GoodsSpecificationID" data-options="required:true" /></td>
</tr>
<tr>
<td>规格名称:</td>
<td><input id="GoodsSpecificationName" class="easyui-validatebox" type="text" name="GoodsSpecificationName" data-options="required:true" /></td>
</tr>
<tr>
<td>规格备注:</td>
<td><input id="GoodsSpecificationRemark" class="easyui-validatebox" type="text" name="GoodsSpecificationRemark" /></td>
</tr>
<tr>
<td>物品规格图片上传:</td>
<td><input id="SpecificationImg" name="myfile" type="file" /></td>
</tr>
<tr id="GoodsImgTr">
<td>物品规格图片:</td>
<td><img id="GoodsImg" src="" /></td>
</tr>
</table>
</div>

  js:

$.ajaxFileUpload({
url: app.webApi + "tbl_OfficeSupplies_GoodsImg/UploadImg?GoodSpecificationID=" + GoodsSpecificationID,
secureuri: false, // 一般设置为false
fileElementId: "SpecificationImg", // 文件上传表单的id <input type="file" id="fileUpload" name="file" />
dataType: 'text/html;charset=UTF-8', // 返回值类型 一般设置为json
success: function (data) {
if (data == "1") {
$.messager.alert('提示', "上传成功", 'info');
$('#GoodsSpecification').datagrid('reload');
$('#dlg_GoodsSpecification').dialog('close');
} else if (data == "-1") {
$.messager.alert('提示', 上传失败, 'info');
} },
error: function (data)// 服务器响应失败处理函数
{
console.log("服务器异常");
}
});

  ie7显示文件:

后台:

[HttpGet]
public void GetImgByGoodsSpecificationID(Guid GoodsSpecificationID)
{
var context = System.Web.HttpContext.Current;
var modelList = this.Tbl_OfficeSupplies_GoodsImgBLL.LoadEntities(a => a.GoodSpecificationID == GoodsSpecificationID);
if (modelList.Count() > 0) {
var model = modelList.First();
context.Response.ContentType = "text/html;charset=UTF-8";//设置输出类型 context.Response.OutputStream.Write((byte[])model.Img, 0, (int)model.Size); context.Response.End();
}
else
{
context.Response.Write("-1");
context.Response.End();
}
}

  前台:

<!--新增编辑物品规格-->
<div id="dlg_GoodsSpecification" class="easyui-dialog" title="规格" style="width:530px;height:300px;padding:2px;"
data-options="
iconCls: 'icon-Extend-shoppingTrolley',
buttons: '#dlg-buttonsGoodsSpecification',
modal: true,
closed: true
">
<div style="padding:10px 0 10px 60px">
<table style="width:450px;padding:2px;">
<tr style="display:none;">
<td>规格ID:</td>
<td><input id="GoodsSpecificationID" class="easyui-validatebox" type="text" name="GoodsSpecificationID" data-options="required:true" /></td>
</tr>
<tr>
<td>规格名称:</td>
<td><input id="GoodsSpecificationName" class="easyui-validatebox" type="text" name="GoodsSpecificationName" data-options="required:true" /></td>
</tr>
<tr>
<td>规格备注:</td>
<td><input id="GoodsSpecificationRemark" class="easyui-validatebox" type="text" name="GoodsSpecificationRemark" /></td>
</tr>
<tr>
<td>物品规格图片上传:</td>
<td><input id="SpecificationImg" name="myfile" type="file" /></td>
</tr>
<tr id="GoodsImgTr">
<td>物品规格图片:</td>
<td><img style="max-height:100px;" id="GoodsImg" src="" /></td>
</tr>
</table>
</div>
</div>
<div id="dlg-buttonsGoodsSpecification">
<a id="dlg-buttons-savebuttonsGoodsSpecification" href="javascript:void(0)" class="easyui-linkbutton">保存</a>
</div>
<!--新增编辑物品规格-->

  js:

$("#GoodsImg").attr("src", app.webApi + "tbl_OfficeSupplies_GoodsImg/GetImgByGoodsSpecificationID?GoodsSpecificationID=" + GoodsSpecification.ID + "&n=" + newGuid());

  

最新文章

  1. mysql求最大第二,最大第三个数
  2. a* products
  3. execl一个工作薄中有几个个工作表,将这几个个工作表分别保存到不同execl文件中
  4. Jquery ajax请求导出Excel表格
  5. yii 获取系统级请求参数的常用方法
  6. JavaScript 学习笔记之线程异步模型
  7. 当webview遇到了Slidingmenu,webView出现卡白,解决方案
  8. JavaWeb之Servlet总结
  9. 如何取得ChipmunkConstraint实例对象的私有属性
  10. SpringBoot进阶教程(二十八)整合Redis事物
  11. HTML页面转换为Sharepoint母版页(实战)
  12. line-height &amp;&amp; vertical-align 学习总结
  13. Git 爬坑路(从小白开始入门) ——(1)
  14. 通过配置文件添加MIME类型
  15. Java-Runoob-高级教程-实例-时间处理:03. Java 实例 - 获取年份、月份等
  16. odoo开发笔记 -- 前台不同视图访问同一个模型
  17. CentOS 7 Apache服务的安装与配置
  18. 【leetcode】solution in java——Easy2
  19. 【剑道】日常练习相关Q&amp;A 整理
  20. ElasticSearch Document API

热门文章

  1. Can rename table but can not truncate table
  2. Chrome Dev Editor:一个新的JavaScript和Dart IDE
  3. Android实现小圆点显示未读功能
  4. ASP.NET MVC3 系列教程 - 模型
  5. Java编程介绍
  6. Java自带命令详解
  7. Vivado Logic Analyzer的进一步探讨
  8. [svc][bg]phabricator-zh_CN汉化包
  9. thinkphp验证码出不来
  10. weex-iOS集成