我正在尝试使用上传jquery控件。下面的代码成功连接到我的ASP.Net Handler和进程文件。处理完之后,我需要将一串数据发送回客户端。
Here is the example我正在努力..
我遇到了一些问题..
1)如何从Handler
将数据发送回客户端2)是否有人熟悉了解处理程序成功的代码。我没有看到一个OnComplete,done方法来订阅。
这是我的处理程序..
public class FileUpload : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
if (context.Request.Files.Count == 0)
{
LogRequest("No files sent.");
context.Response.ContentType = "text/plain";
context.Response.Write("No files received.");
}
else
{
HttpPostedFile uploadedfile = context.Request.Files[0];
string FileName = uploadedfile.FileName;
string FileType = uploadedfile.ContentType;
int FileSize = uploadedfile.ContentLength;
LogRequest(FileName + ", " + FileType + ", " + FileSize);
string theName=uploadedfile.FileName.Substring(uploadedfile.FileName.LastIndexOf('\\'));
uploadedfile.SaveAs(HttpContext.Current.Server.MapPath("/Upload") + theName);
context.Response.ContentType = "text/plain";
context.Response.Write("{\"name\":\"" + FileName + "\",\"type\":\"" + FileType + "\",\"size\":\"" + FileSize + "\"}");
context.Response.Write("Hi From Handler");
}
}
public bool IsReusable
{
get
{
return false;
}
}
这是我的客户代码..
<script>
/*global $ */
$(function () {
$('#file_upload').fileUploadUI({
url: 'FileUpload.ashx',
method: 'POST',
uploadTable: $('#files'),
downloadTable: $('#files'),
buildUploadRow: function (files, index) {
return $('<tr><td>' + files[index].name + '<\/td>' +
'<td class="file_upload_progress"><div><\/div><\/td>' +
'<td class="file_upload_cancel">' +
'<button class="ui-state-default ui-corner-all" title="Cancel">' +
'<span class="ui-icon ui-icon-cancel">Cancel<\/span>' +
'<\/button><\/td><\/tr>');
},
buildDownloadRow: function (file) {
return $('<tr><td>' + file.name + '<\/td><\/tr>');
},
parseResponse: function (data) {
alert("yo");
}
});
});
</script>
答案 0 :(得分:1)
1)如何从处理程序
将数据发送回客户端
你这样做的方式似乎是正确的,只需将其写入响应流即可。
2)是否有人熟悉,了解在哪里捕获代码 处理程序的成功。我没有看到一个OnComplete,done方法来订阅 太
我没有使用fileUploadUI插件,但基于文档,发送方法返回一个jqXHR对象,您应该能够绑定到成功函数
以下是文档中的代码段
var jqXHR = $('#fileupload').fileupload('send', {files: filesList})
.success(function (result, textStatus, jqXHR) {/* ... */})
.error(function (jqXHR, textStatus, errorThrown) {/* ... */})
.complete(function (result, textStatus, jqXHR) {/* ... */});
编辑:
应该有两种方法可以绑定到回调,方法是将它们与options对象一起传递,或者稍后将事件侦听器绑定到widget元素。
例如:
$('#fileupload').fileupload({
always: function (e, data) {
//the jqXHR is a property of the data object
},
//rest of the options
});
答案 1 :(得分:1)
添加Jack的部分回复.. 您可以通过两种方式定义事件回调:
1)将事件侦听器绑定到widget元素,例如
$('#fileupload')
.bind('fileuploadsend', function (e, data) {/* ... */})
.bind('fileuploaddone', function (e, data) {/* ... */})
.bind('fileuploadfail', function (e, data) {/* ... */})
执行小部件的回调后将调用这些函数。因此,在小部件的“完成”回调运行后,将调用使用“fileuploaddone”绑定的函数。
2)要完全覆盖小部件的回调,您可以将回调定义为小部件选项的一部分。
$('#fileupload').fileupload({
done: function (e, data) {
},
send: function (e, data) {
},
//other options
});
此处所有小部件事件的文档:https://github.com/blueimp/jQuery-File-Upload/wiki/Options(搜索“回调选项”)
如果您遇到IE9上已完成或其他回调的问题,那么此处的响应可能很有用:blueimp jquery file upload - "done", "complete" callbacks not working for IE 9
希望这会有所帮助。
答案 2 :(得分:0)
我遇到同样的问题,尝试将返回的de数据类型更改为“html”.Ex:
$('#fied').fileupload({
url: 'handler.ashx',
type: 'POST',
dataType: 'html',
});
在我的案例中工作。