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 >

运行起来的html页面如下图:

2011051411314172.png

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了,运行起来:

2011051211271850.png

寄语:希望喜欢asp.net mvc 的朋友和我交流。o(∩_∩)o 


转载于:https://www.cnblogs.com/liulikui/archive/2011/05/12/2044167.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值