2

fileuploadfieldを含む単純なExtJsフォームパネルがあります。フォームをサーバーに送信すると、すべてのキー値フォーム値がサーバーに送信されますが、ファイルアップロードフィールドのキー値ペアは送信されません。なぜこれなのか誰か知っていますか?(以下にいくつかのコードスニペットを添付しました)

また、サーバーでのアップロードを処理するにはどうすればよいですか。つまり、画像をサーバーにアップロードして処理し、サーバーのどこかに保存したいですか?

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');
                }
            });
        }
    }
}]
4

2 に答える 2

4

ファイルメソッドのパラメータを取得できません。したがって、フォトパス変数は通常nullになります。アップロードされたファイルにアクセスするには、次のようにします。

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

また、JavaScriptでフォーム構成に追加fileUpload: true,して、フォームにファイルをアップロードしていることをExtJSが認識できるようにする必要があります。

于 2011-03-29T05:21:28.440 に答える
1

同様の問題がありました。ファイルのアップロードを処理するページで、コンテンツタイプを「text/html」に設定する必要があることがわかりました。:-(

Response.ContentType = "text/html";

Ext.data.Connectionのドキュメントを読むと、次のことがわかります。

サーバーの応答はブラウザーによって解析され、IFRAMEのドキュメントが作成されます。サーバーがJSONを使用して戻りオブジェクトを送信している場合、ブラウザにテキストを変更せずにドキュメント本文に挿入するように指示するには、Content-Typeヘッダーを「text/html」に設定する必要があります。

これを見つけるのにしばらく時間がかかりましたが、あなたの質問に出くわしたとき、他の誰かが同様の問題を抱えている可能性があります!

うまくいけば、これは彼らを助けるでしょう!

于 2011-06-03T13:14:35.197 に答える