Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

upload file using jquery and handler(ashx)

I am trying to upload a file using jquery ajax with handler (c#). The problem is, when I call the handler I get

context.Request.File.Count=0

Here is the aspx code:

<!--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>    

The c# code handler:

/* 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);
}
like image 311
user1092626 Avatar asked Dec 11 '11 19:12

user1092626


3 Answers

Your code...

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

..is missing the data parameter. The way it's currently written, nothing is being sent to the handler.

You need to pass the file to the handler, using the data parameter. Please have a go through this link: http://www.aspdotnet-suresh.com/2015/02/jquery-upload-images-files-without-page-refresh-postaback-in-aspnet.html

like image 44
Ranjan Shetty Avatar answered Oct 20 '22 23:10

Ranjan Shetty


i think the problem is with the contentType try

contentType: 'multipart/form-data',

OR

contentType :'application/octet-stream';

see this post for more information

Sending multipart/formdata with jQuery.ajax

like image 88
Rafay Avatar answered Oct 20 '22 22:10

Rafay


You can add this kind of code to the handler file. Then you can post to this url(whateverroot/yourhandler.ashx)

The content type should be "multipart/form-data". For eg: If you're using a HTML form tag, then 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);
}
like image 38
Venugopal M Avatar answered Oct 20 '22 22:10

Venugopal M