我现在已经打了很长时间了,所以我觉得是时候伸出援手了。我有一些已经存在的代码使用jQuery File Uploader插件,允许我将文件上传到我的web服务器。我遇到的麻烦是列出Web服务器上已存在的文件。
以下是我在客户端运行的初始代码:
$('#fileupload').fileupload({
disableImageResize: false,
url: '/api/upload',
done: function (e, data) { // data is checked here }
});
// Load existing files:
$('#fileupload').addClass('fileupload-processing');
$.ajax({
url: $('#fileupload').fileupload('option', 'url'),
dataType: 'json',
context: $('#fileupload')[0],
data: { action: "FileList", blob: "uts", path: "Unit 14/Binaries/" }
}).always(function (e, data) {
$(this).removeClass('fileupload-processing');
}).done(function (result) {
$(this).fileupload('option', 'done')
.call(this, $.Event('done'), { result: result });
});
现在,我正在尝试返回服务器端与JSON response akin to the documentation匹配的预先存在的文件列表。我在服务器端的代码如下所示(使用我的FilesStatus class有两个名为“Something”和“SomethingElse”的虚假文件。)
// Get a list of files from
private void FileList(HttpContext hc)
{
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
List<FilesStatus> fs_list = new List<FilesStatus>();
fs_list.Add(new FilesStatus("Something", 124));
fs_list.Add(new FilesStatus("SomethingElse", 124));
HttpContext.Current.Response.AddHeader("Pragma", "no-cache");
HttpContext.Current.Response.AddHeader("Cache-Control", "private, no-cache");
hc.Response.AddHeader("Content-Disposition", "inline; filename=\"files.json\"");
var result = new { files = fs_list.ToArray() };
hc.Response.Write(serializer.Serialize(result));
hc.Response.ContentType = "application/json";
HttpContext.Current.Response.StatusCode = 200;
}
在AJAX代码的“完成”功能中,我在客户端看到我认为是正确的响应。在这里,您可以在我的Javascript调试器中看到格式(即,作为数组的顶级“文件”):
但是,这些文件不会填充到文件列表中。我在main done()函数中标记为“// data here here”的代码显示该数组可以作为“data.result.files”而非“data.files”访问。我可以改变“.call(this,$ .Event('done'),{result:result});” “.call(this,$ .Event('done'),{files:result.files});”所以“data.files”是文件数组的位置,但这并不能解决问题。我似乎无法将任何预先存在的文件加载到列表中。
有谁看到我做错了什么?节日快乐。
答案 0 :(得分:0)
更改行时会发生什么:
hc.Response.Write(serializer.Serialize(result));
到
hc.Response.Write(serializer.Serialize(fs_list.ToArray()));
在序列化文件描述时,看起来序列化程序会考虑变量名。 'result'JSON对象应该从响应中消失。
答案 1 :(得分:0)
我覆盖了我所拥有的done()方法:
done: function (e, data) { // data is checked here }
我这样做是为了调试,但显然它会阻止预先存在的文件列表被加载并调用下载模板。