0

我正在为我的 .Net 项目使用“https://github.com/ieb/jQueryFileUpload.Net”.Net .ashx 版本的 jQuery File Uploader 处理程序。它来自 iframe。

我想为每个文件上传事件发送两个参数:“recordId”和“FieldName”。这可能吗?

4

1 回答 1

0

这是我的解决方案;

首先,当 iframe 打开时,它会搜索列出现有文件。

loadFiles = function (id, field) {
            // Show uploaded files
            $.getJSON($('#fileupload form').prop('action'), { Id: id, Field: field }, function (files) {
                var fu = $('#fileupload').data('fileupload');
                fu._adjustMaxNumberOfFiles(-files.length);

                fu._renderDownload(files)
                .appendTo($('#fileupload .files'))
                .fadeIn(function () {
                    // Fix for IE7 and lower:
                    $(this).show();
                });
            });
        }

正如您在上面看到的,我在我的解决方案中为每条记录添加了 ID 和字段名称,因此它将检查记录自己的文件夹。在代码隐藏中,我添加了这个来创建会话参数:

protected void Page_Load(object sender, EventArgs e)
    {
        Session.Add("fuFilePath", "\\");
    }

最后,在处理程序中有一个控制机制,可以获取记录字段的所有其他调用的路径信息。

    public string FILEPATH = "";

    public string StorageRoot(HttpContext context)
    {
        if (context.Session["fuFilePath"] != null)
            FILEPATH = context.Session["fuFilePath"].ToString();
        else
            FILEPATH = ConfigurationManager.AppSettings["StorageRoot"];

        Directory.CreateDirectory(FILEPATH);
        return FILEPATH; 
    }

    public bool IsReusable { get { return false; } }

    public void ProcessRequest (HttpContext context) {
        context.Response.AddHeader("Pragma", "no-cache");
        context.Response.AddHeader("Cache-Control", "private, no-cache");

        if (context.Request.Params["Id"] != null && context.Request.Params["Field"] != null) {
            context.Session["fuFilePath"] = ConfigurationManager.AppSettings["StorageRoot"] + context.Request.Params["Id"] + "\\" + context.Request.Params["Field"] + "\\"; ;
        }

        HandleMethod(context);
    }

对于所有其他调用,它首先查看会话参数并获取记录的文件路径。如果用户为另一个字段或另一个记录打开 fileupload 的 iframe,首先它将列出现有文件,因此会话参数将被正确的替换,直到发生新的列出活动。

这对我来说是最简单的方法。

于 2012-09-19T15:16:36.320 回答