问题
I'm trying to use Uploadify in a ASP.NET webforms project. The problem is that my script is not calling the generic handler. Here is the script.
<input id="fileInput" name="fileInput" type="file" /> <script type="text/javascript"> $(document).ready(function() { $('#fileInput').uploadify({ 'uploader': '/Ferramenta/Comum/Uploadify/uploadify.swf', 'script': 'UploadTest.ashx', 'cancelImg': '/Ferramenta/Comum/Uploadify/cancel.png', 'folder': "/Ferramenta/Geral/", 'auto': true, 'onError': function(event, queueID, fileObj, errorObj) { alert('error'); }, 'onComplete': function(event, queueID, fileObj, response, data) { alert('complete'); }, 'buttonText' : 'Buscar Arquivos' }); }); </script>
This is the code of the generic handler (just to test)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.IO;
namespace Tree.Ferramenta.Geral
{
public class UploadTest : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.Write("1");
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
Any ideas ? Thanks !
回答1:
Have you tried the code on IE and Firefox? If you only get this problem with Firefox, try creating a Global.asax with the following code (I just have the code in VB.NET):
Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
'' Fix for the Flash Player Cookie bug in Non-IE browsers.
'' Since Flash Player always sends the IE cookies even in FireFox
'' we have to bypass the cookies by sending the values as part of the POST or GET
'' and overwrite the cookies with the passed in values.
'' The theory is that at this point (BeginRequest) the cookies have not been ready by
'' the Session and Authentication logic and if we update the cookies here we'll get our
'' Session and Authentication restored correctly
Try
Dim session_param_name As String = "ASPSESSID"
Dim session_cookie_name As String = "ASP.NET_SESSIONID"
If HttpContext.Current.Request.Form(session_param_name) IsNot Nothing Then
UpdateCookie(session_cookie_name, HttpContext.Current.Request.Form(session_param_name))
ElseIf HttpContext.Current.Request.QueryString(session_param_name) IsNot Nothing Then
UpdateCookie(session_cookie_name, HttpContext.Current.Request.QueryString(session_param_name))
End If
Catch ex As Exception
End Try
Try
Dim auth_param_name As String = "AUTHID"
Dim auth_cookie_name As String = FormsAuthentication.FormsCookieName
If HttpContext.Current.Request.Form(auth_param_name) IsNot Nothing Then
UpdateCookie(auth_cookie_name, HttpContext.Current.Request.Form(auth_param_name))
ElseIf HttpContext.Current.Request.QueryString(auth_param_name) IsNot Nothing Then
UpdateCookie(auth_cookie_name, HttpContext.Current.Request.QueryString(auth_param_name))
End If
Catch ex As Exception
End Try
End Sub
Private Sub UpdateCookie(ByVal cookie_name As String, ByVal cookie_value As String)
Dim cookie As HttpCookie = HttpContext.Current.Request.Cookies.Get(cookie_name)
If cookie Is Nothing Then
cookie = New HttpCookie(cookie_name)
End If
cookie.Value = cookie_value
HttpContext.Current.Request.Cookies.Set(cookie)
End Sub
And then call uploadify like this:
<input id="fileInput" name="fileInput" type="file" />
<script type="text/javascript">
$(document).ready(function() {
var AUTHID = '<%= IIf(Request.Cookies(FormsAuthentication.FormsCookieName) Is Nothing, String.Empty, Request.Cookies(FormsAuthentication.FormsCookieName).Value) %>';
var ASPSESSID = '<%= Session.SessionID %>';
$('#fileInput').uploadify({
'uploader': '/Ferramenta/Comum/Uploadify/uploadify.swf',
'script': 'UploadTest.ashx',
'scriptData': { 'ASPSESSID': ASPSESSID, 'AUTHID': AUTHID },
'cancelImg': '/Ferramenta/Comum/Uploadify/cancel.png',
'folder': "/Ferramenta/Geral/",
'auto': true,
'onError': function(event, queueID, fileObj, errorObj) {
alert('error');
},
'onComplete': function(event, queueID, fileObj, response, data) {
alert('complete');
},
'buttonText' : 'Buscar Arquivos'
});
});
</script>
回答2:
You can check if the namespace for the handler class (UploadTest.ashx) is the same in the markup and code behind – for me it was the thing causing the same problem.
回答3:
Put a breakpoint in ProcessRequest
.. does it fire?
If your website content is not public, add to web.config
authorization access to the Handler, in order to avoid HTTP Error
<location path="Upload.ashx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
回答4:
Browse directly to your .ashx file, do you get any errors?
Download firebug, and check to see if you are receiving any javascript errors as well.
You might also want to add:
context.Response.ContentType = "text/plain";
context.Response.StatusCode = 200;
回答5:
Is your site on SSL? I had the same problem and it turned out it was because I had an invalid certificate. Something to do with Flash burying an error if you are uploading a file with a bad cert.
来源:https://stackoverflow.com/questions/2380456/uploadify-not-working-with-asp-net-webforms