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页面如下图:

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 


posted @   追求完美编程  阅读(5945)  评论(20编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
Nobody but you!
点击右上角即可分享
微信分享提示