asp.net mvc + ExtJs 上传文件
刚刚接触 asp.net mvc ,ExtJs 在以前的公司用过,好长时间没用了。
今天来尝试下用asp.net mvc做服务器端,客户端用Extjs 上传文件,我用的ExtJs 是 v3.3版本的。
功能:可以上传图片(.jpg|.jpeg|.gif|.bmp|.png)和视频(.mp4|.swf|.flv|.wmv|.avi)。
Html代码:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>添加新品</title>
<link href="/Content/resources/css/ext-all.css" rel="stylesheet" type="text/css" />
<link href="/Content/manager.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/Scripts/ext-base.js"></script>
<script type="text/javascript" src="/Scripts/ext-all.js"></script>
<script type="text/javascript" src="/Scripts/ext-file-upload-field.js"></script>
<script type="text/javascript" src="/Scripts/common.js"></script>
<script type="text/javascript">
Ext.QuickTips.init();
Ext.onReady(loadForm);
function loadForm() {
var seasonStore = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({
url: "/action/product/getseason"
}),
reader: new Ext.data.JsonReader({
totalProperty: "total",
root: "result",
fields: [{ name: 'IId' }, { name: 'VcName'}]
})
});
seasonStore.load();
var newsForm = new Ext.form.FormPanel({
title: "添加产品",
iconCls: "form-window",
labelWidth: 60,
method: 'POST',
fileUpload: true,
url: '/action/product/add',
frame: true,
layout: 'form',
width: 600,
defaults: {
allowBlank: false,
msgTarget: 'side',
anchor: '95%'
},
items: [{
xtype: 'textfield',
fieldLabel: '产品名称',
id: 'ProductName',
name: 'ProductName',
emptyText: '产品名称',
blankText: '请输入产品名称'
}, {
xtype: 'radiogroup',
fieldLabel: '产品类型',
id: 'ProductType',
anchor: '30%',
items: [{
xtype: 'radio',
name: 'ProductType',
boxLabel: '图片',
checked: true,
inputValue: '1'
}, {
xtype: 'radio',
name: 'ProductType',
boxLabel: '视频',
inputValue: '2'
}]
}, {
xtype: 'combo',
fieldLabel: '所属季节',
id: 'season',
name: 'season',
emptyText: '所属季节',
blankText: '请选择所属季节',
mode: 'local',
displayField: "VcName",
valueField: "IId",
hiddenName: "ProductSeason",
editable: false,
typeAhead: true,
forceSelection: true,
triggerAction: 'all',
selectOnFocus: true,
store: seasonStore
}, {
xtype: 'fileuploadfield',
fieldLabel: '缩略图',
name: 'ProductThumbnail',
emptyText: '缩略图',
blankText: '请选择一张图片',
buttonCfg: {
text: '',
iconCls: 'button-browser'
}
}, {
xtype: 'fileuploadfield',
fieldLabel: '图片视频',
name: 'ProductSlider',
emptyText: '图片、视频',
blankText: '请选择一个文件',
buttonCfg: {
text: '',
iconCls: 'button-browser'
}
}
],
buttons: [{
text: '保存',
width: 60,
iconCls: 'button-save',
handler: function() {
if (newsForm.getForm().isValid()) {
newsForm.form.submit({
waitMsg: '正在提交……',
success: function(form, response) {
console.log(response);
response = response.result;
if (response.success == 1) {
if (response.msg == 1) {
core.alert.info("发布成功");
form.reset();
} else if (response.msg == -1) {
core.alert.warn("您还没登录");
} else {
core.alert.error("发布失败");
}
} else {
core.alert.error(response.msg);
}
},
failure: function(form, response) {
response = response.result;
core.alert.error(response.msg);
}
});
}
}
}, {
text: '重置',
width: 60,
iconCls: 'button-reset',
handler: function() {
newsForm.form.reset();
}
}],
buttonAlign: 'center'
});
newsForm.render(document.body);
}
</script>
</head>
<body>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>添加新品</title>
<link href="/Content/resources/css/ext-all.css" rel="stylesheet" type="text/css" />
<link href="/Content/manager.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/Scripts/ext-base.js"></script>
<script type="text/javascript" src="/Scripts/ext-all.js"></script>
<script type="text/javascript" src="/Scripts/ext-file-upload-field.js"></script>
<script type="text/javascript" src="/Scripts/common.js"></script>
<script type="text/javascript">
Ext.QuickTips.init();
Ext.onReady(loadForm);
function loadForm() {
var seasonStore = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({
url: "/action/product/getseason"
}),
reader: new Ext.data.JsonReader({
totalProperty: "total",
root: "result",
fields: [{ name: 'IId' }, { name: 'VcName'}]
})
});
seasonStore.load();
var newsForm = new Ext.form.FormPanel({
title: "添加产品",
iconCls: "form-window",
labelWidth: 60,
method: 'POST',
fileUpload: true,
url: '/action/product/add',
frame: true,
layout: 'form',
width: 600,
defaults: {
allowBlank: false,
msgTarget: 'side',
anchor: '95%'
},
items: [{
xtype: 'textfield',
fieldLabel: '产品名称',
id: 'ProductName',
name: 'ProductName',
emptyText: '产品名称',
blankText: '请输入产品名称'
}, {
xtype: 'radiogroup',
fieldLabel: '产品类型',
id: 'ProductType',
anchor: '30%',
items: [{
xtype: 'radio',
name: 'ProductType',
boxLabel: '图片',
checked: true,
inputValue: '1'
}, {
xtype: 'radio',
name: 'ProductType',
boxLabel: '视频',
inputValue: '2'
}]
}, {
xtype: 'combo',
fieldLabel: '所属季节',
id: 'season',
name: 'season',
emptyText: '所属季节',
blankText: '请选择所属季节',
mode: 'local',
displayField: "VcName",
valueField: "IId",
hiddenName: "ProductSeason",
editable: false,
typeAhead: true,
forceSelection: true,
triggerAction: 'all',
selectOnFocus: true,
store: seasonStore
}, {
xtype: 'fileuploadfield',
fieldLabel: '缩略图',
name: 'ProductThumbnail',
emptyText: '缩略图',
blankText: '请选择一张图片',
buttonCfg: {
text: '',
iconCls: 'button-browser'
}
}, {
xtype: 'fileuploadfield',
fieldLabel: '图片视频',
name: 'ProductSlider',
emptyText: '图片、视频',
blankText: '请选择一个文件',
buttonCfg: {
text: '',
iconCls: 'button-browser'
}
}
],
buttons: [{
text: '保存',
width: 60,
iconCls: 'button-save',
handler: function() {
if (newsForm.getForm().isValid()) {
newsForm.form.submit({
waitMsg: '正在提交……',
success: function(form, response) {
console.log(response);
response = response.result;
if (response.success == 1) {
if (response.msg == 1) {
core.alert.info("发布成功");
form.reset();
} else if (response.msg == -1) {
core.alert.warn("您还没登录");
} else {
core.alert.error("发布失败");
}
} else {
core.alert.error(response.msg);
}
},
failure: function(form, response) {
response = response.result;
core.alert.error(response.msg);
}
});
}
}
}, {
text: '重置',
width: 60,
iconCls: 'button-reset',
handler: function() {
newsForm.form.reset();
}
}],
buttonAlign: 'center'
});
newsForm.render(document.body);
}
</script>
</head>
<body>
</body>
</html>
运行起来的html页面如下图:
Controller 服务器端代码:
/// <summary> /// 产品接口 /// </summary> /// <param name="id">请求参数</param> public ActionResult Product( string id) { object objJson = base .SetError( this .output); if ( base .CurrentUser != null ) { switch (id.ToLower()) { #region 添加产品 case "add" : try { int pType = 1; int .TryParse(Request.Form[ "ProductType" ], out pType); DateTime dtCreateDate = DateTime.Now; string fileName = Core.GetDateToString(dtCreateDate); HttpPostedFileBase pThumbnail = Request.Files[ "ProductThumbnail" ]; HttpPostedFileBase pSlider = Request.Files[ "ProductSlider" ]; string thumbnailRootPath = "/image/product/thumbnail/" , sliderRootPath = "/image/product/slider/" ; string thumbnailSavePath = this .UploadFile(thumbnailRootPath, fileName, pThumbnail, false , 120); if (thumbnailSavePath != string .Empty) { string [] array = pType == 1 ? Core.GetPictureExtension() : Core.GetVideoExtension(); string sliderSavePath = this .UploadFile(sliderRootPath, fileName, pSlider, array, pType == 1 ? 2048 : 3072); if (sliderSavePath != string .Empty) { string pName = Request.Form[ "ProductName" ]; int seasonId = 0; int .TryParse(Request.Form[ "ProductSeason" ], out seasonId); long productId = this .productBusiness.CreateProduct(pName, pType, seasonId, thumbnailSavePath, sliderSavePath, dtCreateDate); if (productId > 0) { objJson = base .SetMessage(1); //1 } else { objJson = base .SetMessage(0); //0 } } else { objJson = base .SetError( "上传幻灯片失败" ); } } else { objJson = base .SetError( "上传缩略图失败" ); } } catch (ValidationException vex) { objJson = base .SetError(vex.Message); } catch (Exception ex) { objJson = base .SetError(ex.Message); } break ; #endregion default : break ; } } else { //objJson = base.SetErrorMessage("您还没登录"); } return Content( base .GenerateJson(objJson)); } |
特别注意:
由于asp.net mvc 默认情况下限制上传文件大小为4MB,通过修改web.config文件来改变应用程序上传限制
在web.config的<system.web>节点中加入 <httpRuntime maxRequestLength="10240" executionTimeout="200" enable="true" />
maxRequestLength: 设置上传文件大小,单位是kb. 我设置了10M 兆
executionTimeout: 允许执行请求的最大秒数,此功能必须在Compilation元素中Debug属性为false时才生效.
enable: 指定是否在当前的节点及子节点级别启用应用程序域 (AppDomain),以接受传入的请求。如果为 False,则实际上关闭了该应用程序。默认值为 True.
OK了,运行起来:
寄语:希望喜欢asp.net mvc 的朋友和我交流。o(∩_∩)o
分类:
asp.net mvc
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库