【问题标题】:upload file using jquery and handler(ashx)使用 jquery 和处理程序(ashx)上传文件
【发布时间】:2012-01-18 00:16:47
【问题描述】:

我正在尝试使用带有处理程序 (c#) 的 jquery ajax 上传文件。问题是,当我调用处理程序时,我得到了

context.Request.File.Count=0

这是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>    

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

【问题讨论】:

  • 你曾经能够让它工作吗?

标签: jquery file-upload upload handler


【解决方案1】:

我认为问题出在contentType 尝试

contentType: 'multipart/form-data',

contentType :'application/octet-stream';

查看这篇文章了解更多信息

Sending multipart/formdata with jQuery.ajax

【讨论】:

    【解决方案2】:

    您可以将此类代码添加到处理程序文件中。然后你可以发布到这个 url(whateverroot/yourhandler.ashx)

    内容类型应为“multipart/form-data”。 例如: 如果您使用的是 HTML 表单标签,则 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】:

      您的代码...

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

      ..缺少data 参数。它目前的编写方式,没有任何东西被发送到处理程序。

      您需要使用data 参数将文件传递给处理程序。 请浏览此链接:http://www.aspdotnet-suresh.com/2015/02/jquery-upload-images-files-without-page-refresh-postaback-in-aspnet.html

      【讨论】:

        猜你喜欢
        • 2013-06-02
        • 1970-01-01
        • 1970-01-01
        • 2013-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-27
        相关资源
        最近更新 更多