我正在为我的 .Net 项目使用“https://github.com/ieb/jQueryFileUpload.Net”.Net .ashx 版本的 jQuery File Uploader 处理程序。它来自 iframe。
我想为每个文件上传事件发送两个参数:“recordId”和“FieldName”。这可能吗?
我正在为我的 .Net 项目使用“https://github.com/ieb/jQueryFileUpload.Net”.Net .ashx 版本的 jQuery File Uploader 处理程序。它来自 iframe。
我想为每个文件上传事件发送两个参数:“recordId”和“FieldName”。这可能吗?
这是我的解决方案;
首先,当 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,首先它将列出现有文件,因此会话参数将被正确的替换,直到发生新的列出活动。
这对我来说是最简单的方法。