【问题标题】:Why doesn't uploadify work for me in Firefox or Chrome?为什么 uploadify 在 Firefox 或 Chrome 中对我不起作用?
【发布时间】:2011-01-14 17:47:14
【问题描述】:

我正在尝试使用 uploadify 从我的 ASP.NET MVC Web 应用程序进行简单的文件上传。在 IE8 中,它工作正常。在 Firefox 和 Chrome 中,它似乎永远不会发布到控制器操作。有人可以帮我找出我做错了什么吗?

这是我的html:

<input type="file" id="file_upload" name="FileData" />

我包括 jquery 1.4.1 和当前版本 uploadify 2.1.4 的内容,它本身包括 swfobject 2.2。

这是我的脚本:

$(函数() {

$("#file_upload").uploadify({
  'uploader':   '/Scripts/uploadify.swf',
  'script':     '/Uploads/UploadFile',
  'cancelImg':  '/Content/Images/cancel.png',
  'auto':       true,
  'multi':      false,
  'folder':     '/uploads',

  onComplete : function() {
    alert("complete");
  },

  onOpen : function() {
    alert("open");
  },

  onError : function (event, id, fileObj, errorObj) {
    alert("error: " + errorObj.info);
  }

});

});

这是我的控制器操作:

public string UploadFile(HttpPostedFileBase FileData)
{
    // do stuff with the file
}

在 Chrome 和 Firefox 中,我收到“错误 #2038”消息,从我在 google 上可以找到的内容来看,这似乎很神秘。我做错了什么?

【问题讨论】:

  • 您何时何地收到错误消息?
  • 错误信息就在onError回调的errorObj中。

标签: jquery asp.net-mvc uploadify


【解决方案1】:

要尝试的事情:

  1. 您的控制器操作应该返回 ActionResult,而不是字符串
  2. 安装Fiddler 并查看幕后发生的情况(您将看到HTTP 请求/响应帧和可能的错误)。然后比较不同浏览器之间的结果,看看是否有变化。

【讨论】:

  • 谢谢...我之前曾尝试使用提琴手来查看此内容,但我从未注意到发回控制器的帖子。在我阅读了如何让 fiddler 记录 localhost 请求之后,很明显这是一个身份验证问题,因为 Flash 请求中的 ASP.NET 会话与我的标准基于浏览器的请求中的会话不同。谢谢!
  • 你是如何解决这个问题的?我有同样的问题,我的代码适用于 IE,但不适用于 Firefox 和 Chrome?
  • 能否请您发布有关如何解决此问题的解决方案.. 对所有遇到类似问题的人都非常有用。
【解决方案2】:

就像 Chris Farmer 所说,flash 请求中的会话不同,Chrome 和 Firefox 中不会发送 cookie .ASPXAUTH(或其他会话 cookie)(您可以使用 Fiddler2 观看)

要解决这个问题,你可以在uploadify 中使用“scriptData”。我就是这样进行的:

将此添加到您的uploadify js:

string scriptDataValues = string.Empty;
            if (Request.Cookies != null && Request.Cookies.Length > 0)
            {
                //  Generate scriptData
                scriptDataValues = ", 'scriptData' : {";
                string[] formatedData = new string[Request.Cookies.Length];
                int i = 0;
                foreach (HttpCookie cookie in cookies)
                {
                    // Format cookie to scriptData name:value
                    formatedData[i] = string.Format("\"{0}\":\"{1}\"", cookie.Name, cookie.Value);
                    i++;
                }
                // separate all formated cookies with comma
                scriptDataValues += string.Join(",", formatedData);
                scriptDataValues += "}";
            }
     // add scriptData to your js script
    string yourScript = "<script type=\"text/javascript\">
$(document).ready(function () { $('#file_upload').uploadify({
      'uploader'    : '/uploadify/uploadify.swf',
      'script'      : '/uploadify/uploadify.php',
      'cancelImg'   : '/uploadify/cancel.png',
      'folder'      : '/uploads'
      " + scriptDataValues + "
    }); }); 
</script>"

在你的控制器中你的动作:

[HttpPost]
        public ActionResult UploadProductImage(HttpPostedFileBase image, FormCollection collec)
        {
            Partner partner = null;
            if (!string.IsNullOrEmpty(collec[".ASPXAUTH"]))
            {
                // Get cookie in POST values
                FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(collec[".ASPXAUTH"]);
                if (ticket.Expiration > DateTime.Now)
                {
                     // Authenticated user, upload the file and return url
                }
             }
        return this.Content(string.Empty);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多