2

我正在尝试使用上传 jquery 控件。下面的代码成功连接到我的 ASP.Net 处理程序并正常处理文件。处理后,我需要将一串数据发送回客户端。

这是我正在处理的示例..

我有一些问题..

1)如何从处理程序将数据发送回客户端

2) 是否有熟悉的人了解在哪里可以捕获 Handlers 成功的代码。我也没有看到一个 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> 
4

3 回答 3

1

1)如何从处理程序将数据发送回客户端

您这样做的方式似乎是正确的,只需将其写入响应流即可。

2) 是否有熟悉的人了解在哪里可以捕获 Handlers 成功的代码。我也没有看到一个 OnComplete, done 订阅方法。

我没有使用过fileUploadUI插件,但是根据文档,send方法返回一个 jqXHR 对象,您应该能够将其绑定到成功函数

这是文档中的片段

var jqXHR = $('#fileupload').fileupload('send', {files: filesList})
    .success(function (result, textStatus, jqXHR) {/* ... */})
    .error(function (jqXHR, textStatus, errorThrown) {/* ... */})
    .complete(function (result, textStatus, jqXHR) {/* ... */});

编辑:
应该有两种方法可以绑定到回调,或者通过将它们与选项对象一起传递,或者稍后通过将事件侦听器绑定到小部件元素。

例如:

 $('#fileupload').fileupload({
         always: function (e, data) {
           //the jqXHR is a property of the data object        
         },
     //rest of the options
   });
于 2012-12-21T17:44:58.257 回答
1

添加到 Jack 的部分响应中。您可以通过两种方式定义事件回调:

1) 将事件监听器绑定到小部件元素,例如

$('#fileupload')
    .bind('fileuploadsend', function (e, data) {/* ... */})
    .bind('fileuploaddone', function (e, data) {/* ... */})
    .bind('fileuploadfail', function (e, data) {/* ... */})

这些函数将在小部件的回调执行后被调用。因此,使用“fileuploaddone”绑定的函数将在小部件的“done”回调运行后调用。

2) 要完全覆盖小部件的回调,您可以将回调定义为小部件选项的一部分。

$('#fileupload').fileupload({
     done: function (e, data) {

     },
     send: function (e, data) {

     },
     //other options

});

所有小部件事件的文档:https ://github.com/blueimp/jQuery-File-Upload/wiki/Options (搜索“回调选项”)

如果您在 IE9 上遇到 done 或其他回调的问题,那么此处的响应可能会很有用:blueimp jquery file upload - "done", "complete" 回调不适用于 IE 9

希望这可以帮助。

于 2012-12-22T20:03:29.610 回答
0

我有同样的问题,尝试将返回的数据类型更改为“html”。例如:

    $('#fied').fileupload({
        url: 'handler.ashx',
        type: 'POST',
        dataType: 'html',
    });

在我的情况下工作。

于 2013-09-12T11:34:53.927 回答