upload file using jquery and handler(ashx)

徘徊边缘 提交于 2019-11-29 03:13:49

问题


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);
}

回答1:


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




回答2:


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);
}



回答3:


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



来源:https://stackoverflow.com/questions/8466941/upload-file-using-jquery-and-handlerashx

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!