我正在使用 我的.Net项目的jQuery File Uploader处理程序的“https://github.com/i-e-b/jQueryFileUpload.Net”.Net .ashx版本。它来自iframe。
我想为每个文件上传事件发送两个参数:“recordId”和“FieldName”。 这有可能吗?
答案 0 :(得分: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和Field名称,因此它将检查记录自己的文件夹。 在代码隐藏中,我添加它来创建会话参数:
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);
}
对于所有其他调用,它首先查看session参数并获取记录的文件路径。 如果用户为另一个字段或另一个记录打开fileupload的iframe,首先,它将列出现有文件,因此会话参数将被正确的替换,直到新的列表活动发生。
这对我来说是最简单的方法。