2011-12-11 72 views
7

Estoy tratando de cargar un archivo usando jquery ajax con controlador (C#). El problema es que cuando llamo al manejador consigosubir archivo usando jquery y controlador (ashx)

context.Request.File.Count=0 

Este es el código aspx:

<!--aspx file code--> 
<script language="javascript" type="text/javascript"> 
$().ready(function() 
{ 
    $('#save').click(function (e) 
    { 
     CalluploaderHandler(); 
    }); 
}); 

function CalluploaderHandler() 
{ 
    $.ajax({ 
       type: "POST", 
       url: "Services/UPloader.ashx", 
       contentType: "application/json; charset=utf-8", 
       success: OnComplete, 
       error: OnFail 
      }); 
    return false; 
} 

function OnComplete(result) 
{ 
    alert('Success'); 
} 

function OnFail(result) 
{ 
    alert('Request failed'); 
} 

</script> 
    </head> 
     <body> 
      <form enctype="multipart/form-data"> 
       <label for="file"> 
       Filename:</label> 
       <input name="file" id="file" type="file"> 
       <input id="save" name="submit" value="Submit" type="submit"> 
      </form> 
     </body> 
    </html>  

El controlador de código C#:

/* handler*/ 
public void ProcessRequest(HttpContext context) 
{ 
    string savedFileName = ""; 

    foreach (string file in context.Request.Files) 
    { 
     HttpPostedFile hpf = context.Request.Files[file] as HttpPostedFile; 
     if (hpf.ContentLength == 0) 
      continue; 
     // savedFileName = context.Server.MapPath(Path.GetFileName(hpf.FileName)); 
     // hpf.SaveAs(savedFileName); 
    } 
    context.Response.Write(savedFileName); 
} 
+0

¿Alguna vez pudo hacerlo funcionar? – Adam

Respuesta

3

Puede añadir este tipo de código al archivo de controlador. A continuación, puede publicar en esta url (whateverroot/yourhandler.ashx)

El tipo de contenido debe ser "multipart/form-data". Por ejemplo: Si está utilizando una etiqueta de formulario HTML, entonces enctype = "multipart/form-data".

public void ProcessRequest(HttpContext context) 
{ 
     var result = "0"; 
     try 
     { 
      if (context.Request.Files.Count > 0) 
      { 
       HttpPostedFile file = null; 

       for (int i = 0; i < context.Request.Files.Count; i++) 
       { 
        file = context.Request.Files[i]; 
        if (file.ContentLength > 0) 
        { 
         var fileName = Path.GetFileName(file.FileName); 
         var path = Path.Combine(<somepath>, fileName); 
         file.SaveAs(path); 
         result = "1"; 
        } 
       }  

      } 
     } 
     catch { } 
     context.Response.Write(result); 
} 
Cuestiones relacionadas