使用ASP.NET MVC在服务器上处理ExtJs的fileuploadfield?

时间:2011-03-28 14:42:57

标签: asp.net-mvc extjs image-uploading

我有一个简单的ExtJs表单面板,其中包含一个fileuploadfield。当我将表单提交给服务器时,所有键值表单值都将发送到服务器,但不会发送到文件上载字段的键值对。 有人知道为什么吗? (我在下面附上了一些代码片段)

另外,我如何处理服务器上的上传。即我想将图像上传到服务器处理它并将其保存在服务器上的某个地方?

public JsonResult SetEmployeeDetails(string firstname, string photopath)
    {
        GetData data = delegate
        {
            return Repo.SetEmployeeDetails(firstname, photopath);
        };
        JsonResultBase jsonResult = GetJsonResult(data);
        JsonResult json = PortalJsonResult(jsonResult, JsonRequestBehavior.AllowGet);
        return json;
    }



xtype: 'form',
title: 'Employee Setup',
items: [{
            fieldLabel: 'Firstname',
            xtype: 'textfield',
            name: 'firstname',
            maxLength: 10,
            allowBlank:false
        },
        {
            xtype: 'fileuploadfield',
            id: 'form-file',
            emptyText: 'Select an image',
            fieldLabel: 'Photo',
            name: 'photopath',
            buttonText: '',
            buttonCfg: {
                iconCls: 'upload-icon'
            }
        }],
buttons: [{
    text: 'Save',
    scope: this,
    handler: function(){
        var form = this.items.items[0].getForm();
        if(form.isValid()){
            form.submit({
                url: 'EmployeeDetails/SetEmployeeDetails',
                waitMsg: 'Saving your details...',
                success: function(fp, o){
                    msg('Success', 'Processed file on the server');
                }
            });
        }
    }
}]

2 个答案:

答案 0 :(得分:4)

您无法获取文件方法参数。因此,您的photopath变量通常为null。 要访问上传的文件,您可以执行以下操作:

HttpPostedFileBase postedFile = Request.Files["fileinput"];
if (postedFile != null)
{
   //process the file content using postedFile.InputStream...
}

在javascript中,您需要将fileUpload: true,添加到表单配置中,以便ExtJS知道您正在上传表单中的文件。

答案 1 :(得分:1)

有类似的问题。发现您需要在处理文件上载的页面上将内容类型设置为“text / html”。 :-(

Response.ContentType = "text/html";

如果你read the documentation for Ext.data.Connection,,你会看到

  

浏览器解析服务器响应以创建IFRAME的文档。如果服务器使用JSON发送返回对象,则必须将Content-Type标头设置为“text / html”,以告知浏览器将文本未更改地插入文档正文中。

我花了一段时间才发现这一点,但是当我遇到你的问题时,别人可能会遇到类似的问题!

希望这会对他们有所帮助!