【问题标题】:Using uploadify with ashx handler将 uploadify 与 ashx 处理程序一起使用
【发布时间】:2014-06-08 14:19:34
【问题描述】:

嗨,朋友们,我有一个表单,其中有一些文本框、下拉菜单和图像。我正在使用敲除 js 来保存表单详细信息。而且我正在使用uploadify插件将我的图像上传到本地文件夹。我已经实现了所有这些东西,但是在保存值时,直到现在我使用了一个aspx代码。出于上传目的,我们必须选择 ashx。所以这就像两个服务器端的帖子会发生!

所以我想将我的数据保存在 ashx 页面而不是 aspx 中。

但是我很困惑从哪里开始上传..请有人帮我解决这个问题!!!

我正在将我的值保存在如下所示的保存按钮事件中!!

     self.AddEvent = function (args) {          

       // Here--> $('#file_upload').uploadify('upload');

                    ajax.Post("../Scripts/uploadify/UploadHandler.ashx", JSON.stringify({ objEnt: args }), false).success(function (data) {   

                    if (data.d[0] > 0) {
        // or Here-->            $('#file_upload').uploadify('upload');
                    alert('success');
                  }

我的文件上传设置是:

   $('#file_upload').uploadify({
                'swf': '../Scripts/uploadify/uploadify.swf',
                'uploader': '../Scripts/uploadify/UploadHandler.ashx',
                'method': 'post',
                'formData': { 'someKey': Filename },
                'buttonText': 'Browse',
                'auto': false,
                'folder': 'upload',

                'fileTypeExts': '*.jpg;*.jpeg;*.gif;*.png',
                'onSelect': function (file) {
                    var ext = file.name.split('.').pop();
                    $("#filename").val(Filename + '.' + ext);
                },
                'onUploadSuccess': function (file, data, response) {

                    if (response == true) {

                       $("#eventGrid").jqxGrid('updatebounddata');



                    }

                }

            });

在我的情况下,无法在“onUploadsuccess”中调用 self.AddEvent...!!! 请建议我一些在 ashx 处理程序中同时存储数据和图像的最佳方法。

ashx:

  public void ProcessRequest(HttpContext context)
{

    context.Response.ContentType = "application/json";
    var data = context.Request;
    var sr = new StreamReader(data.InputStream);
    var stream = sr.ReadToEnd();
    var javaScriptSerializer = new JavaScriptSerializer();
    var asd = javaScriptSerializer.Deserialize<RootObject>(stream);
    string Newname = context.Request.Form["someKey"];
    BAL Bl = new BAL();

    string[] args = new string[2];
   //AddEvent method will add my data into database add return response "Success"//
    args = AddEvent(asd.objEnt);

        HttpPostedFile PostedFile = context.Request.Files["Filedata"];

            string ext = Path.GetExtension(PostedFile.FileName);
            string savepath = "";
            string temppath = "";
            temppath = System.Configuration.ConfigurationManager.AppSettings["FolderPath"];
            savepath = context.Server.MapPath(temppath);
            string fileName = Newname + ext;
            if (!Directory.Exists(savepath))
                Directory.CreateDirectory(savepath);

            PostedFile.SaveAs(savepath + @"\" + fileName);

            context.Response.Write(temppath + "/" + fileName);
           // context.Response.Write(args);

            context.Response.StatusCode = 200;

        }
    }

【问题讨论】:

  • 你可以这样使用,先加载所有图片,如果成功,稍后再加载,在uplodify成功后,再进行一次ajax调用,保存数据
  • 但是告诉我一件事我怎样才能得到 ashx 处理程序响应的返回值?我知道 context.response.write(args) 将在控制台中写入。但是我怎样才能获得ajax成功的返回值呢??
  • 感谢您的帮助!!任何示例链接都会很有帮助!
  • 你的意思是在“onUploadSuccess”中我必须发出 ashx 处理程序请求?

标签: c# asp.net ajax


【解决方案1】:
 $("#<%=FileUpload1.ClientID%>").uploadify({
            'uploader': 'Upload.ashx',
            'swf': 'uploadify/uploadify.swf',
            'script': 'Upload.ashx',
            'cancelImg': 'images/cancel.png',
            'folder': '../Upload',
            'multi': true,
            'buttonText': 'select picture',
            'fileExt': '*.jpg;*.png;*.gif;*.bmp;*.jpeg',
            'auto': false,
            'onUploadStart': function () {


            }
        });


$.ajax({
            type: "POST",
            url: 'WebServiceAdmin.asmx/SaveData',
            data: "{'p':'" + datam+ "'}",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (d) { $('#FileUpload1').uploadify('upload', '*');  },
            error: function () {  }
        });

【讨论】:

  • 这个 ashx 会被调用两次,对吧..?一个在发布时,第二个在上传图片时..
  • 关于 Ajax 的成功功能我怎么能得到 ashx 的响应,在你的情况下是 'd'..?在我的代码中查看 args !!!根据回复,我必须做其他事情
  • 你可以检查上传文件。应该是另一个触发所有更新完成的事件
  • 好吧。也许你 csn 使用 cookie。在 ashx 中创建一个 cpokie,稍后从客户端获取它,
猜你喜欢
  • 1970-01-01
  • 2010-11-08
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
相关资源
最近更新 更多